1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2025-02-01 20:06:00 +00:00

2008-12-16 Carsten Dominik <carsten.dominik@gmail.com>

* org.el (org-refile): Avoid refiling to within the region to be
	refiled.

	* org-export-latex.el (org-export-latex-special-chars): Replace
	special characters also in tables.

	* org-agenda.el (org-agenda-change-all-lines): New argument
	FORCE-TAGS.
	(org-agenda-set-tags): Cet the new tags and pas them to
	`org-format-agenda-item'.

2008-12-16  Carsten Dominik  <carsten.dominik@gmail.com>

	* org-export-latex.el (org-export-latex-classes): Add longable as
	a default package to all classes.
	(org-export-latex-tables): Handle the longtable attribute and the
	align attribute.

	* org-table.el (orgtbl-to-generic): Handle tables that start with
	a hline.

	* org-export-latex.el (org-export-latex-emphasis-alist): Switch to
	\verb for colde-like snippets.
	(org-export-as-latex): Fix issues with region export.

	* org.el (org-up-heading-safe): Speed up function by using a
	direct regexp search.
	(org-olpa): New variable.
	(org-get-outline-path): Speed-up path constructions in cases where
	this is possible because the entire hierarchy is scanned anyway.
	(org-refile-get-location): Don't compare the truenames of files,
	this is too slow.
	(org-goto-max-level): New option.
	(org-goto): Use `org-goto-max-level'.

2008-12-16  Tassilo Horn  <tassilo@member.fsf.org>

	* org-gnus.el (org-gnus-article-link, org-gnus-article-link):
	Strip angle brackets from message-ids in the former and don't do
	it in the latter.
	(org-gnus-follow-link): Open summary reliable, even if the last
	messages were deleted, and handle empty groups, too.

2008-12-16  Carsten Dominik  <carsten.dominik@gmail.com>

	* org-export-latex.el (org-export-latex-emphasis-alist): Use \verb
	instead of \texttt for the =...= and ~===~ emphasis environments.
	(org-export-as-latex): Remove any old :org-license-to-kill text
	properties.
	(org-export-as-latex): Pass RBEG to `org-export-latex-first-lines'.
	(org-export-latex-make-header): Add some hard space after the
	table of contents.
	(org-export-latex-first-lines): Accept RBEG argument.  Mark
	exported text so that it will be excuded in further steps.

	* org-table.el (org-table-get-specials): Make @0 reference the
	last line in a table.
	(org-table-recalculate): Improve docstring.

2008-12-16  Carsten Dominik  <carsten.dominik@gmail.com>

	* org.el (org-log-done): Fix docstring.

2008-12-16  Carsten Dominik  <carsten.dominik@gmail.com>

	* org-exp.el (org-export-html-format-image): Fix bugs.

	* org-export-latex.el (org-export-latex-tables)
	(org-export-latex-links): Implement attribute, label, and caption
	handling.

	* org-exp.el (org-export-html-style-default): Add style
	definitions for the figure div.
	(org-export-preprocess-string, org-export-as-html): Implement
	attribute, label, and caption handling.
	(org-export-attach-captions-and-attributes): New function.
	(org-export-html-format-image): New function.
	(org-format-org-table-html): Implement attribute, label, and
	caption handling.

	* org.el (org-find-text-property-in-string): New function.
	(org-extract-attributes): Use the property org-attr instead of
	org-attrobutes, because this property is now set with the #+ATTR
	lines.

2008-12-16  Carsten Dominik  <carsten.dominik@gmail.com>

	* org-compat.el (org-substring-no-properties): Fix for XEmacs, for
	the case that FROM is nil.

	* org.el (org-before-first-heading-p): New function.

2008-12-16  Carsten Dominik  <carsten.dominik@gmail.com>

	* org-exp.el (org-export-as-html): Do not add a space before
	enforces line breaks.
	(org-export-as-html): Close paragraph before blockquote and verse
	tags.

2008-12-16  Carsten Dominik  <carsten.dominik@gmail.com>

	* org-id.el (org-id-locations-file): Wrap file name with
	`convert-standard-filename'.
	(org-id-files): New variable.
	(org-id-use-hash): New option.
	(org-id-update-id-locations): Also search in all files current
	listed in `org-id-files'.  Convert the resulting alist to a hash
	if the user customation says so.
	(org-id-locations-save): Handle he case if `org-id-locations' is a
	hash.
	(org-id-locations-load): Convert the alist to a hash.
	(org-id-add-location): Handle the hast case.
	(kill-emacs-hook): Make sure id locations are saved when Emacs is
	exited.
	(org-id-hash-to-alist, org-id-alist-to-hash)
	(org-id-paste-tracker): New functions.
This commit is contained in:
Carsten Dominik 2008-12-16 13:30:37 +00:00
parent 8265647f5d
commit db55f36865
33 changed files with 710 additions and 279 deletions

View File

@ -1,3 +1,9 @@
2008-12-16 Carsten Dominik <dominik@science.uva.nl>
* org.texi: (Tables in LaTeX export): New section.
(Images in LaTeX export): New section.
(Inlined images, Images in HTML export): Sections renamed.
2008-12-08 Reiner Steib <Reiner.Steib@gmx.de>
* message.texi (Insertion Variables): Don't advertise sc-cite-original.

View File

@ -6,7 +6,7 @@
;; Author: Carsten Dominik <carsten at orgmode dot org>
;; Keywords: outlines, hypermedia, calendar, wp
;; Homepage: http://orgmode.org
;; Version: 6.14
;; Version: 6.15a
;;
;; This file is part of GNU Emacs.
;;
@ -5067,13 +5067,17 @@ the same tree node, and the headline of the tree node in the Org-mode file."
(org-flag-heading nil))) ; show the next heading
(org-add-note))))
(defun org-agenda-change-all-lines (newhead hdmarker &optional fixface just-this)
(defun org-agenda-change-all-lines (newhead hdmarker
&optional fixface just-this
force-tags)
"Change all lines in the agenda buffer which match HDMARKER.
The new content of the line will be NEWHEAD (as modified by
`org-format-agenda-item'). HDMARKER is checked with
`equal' against all `org-hd-marker' text properties in the file.
If FIXFACE is non-nil, the face of each item is modified acording to
the new TODO state."
the new TODO state.
If JUST-THIS is non-nil, change just the current line, not all.
If FORCE-TAGS is non nil, the car of it ar the new tags."
(let* ((inhibit-read-only t)
(line (org-current-line))
props m pl undone-face done-face finish new dotime cat tags)
@ -5088,7 +5092,9 @@ the new TODO state."
(setq props (text-properties-at (point))
dotime (get-text-property (point) 'dotime)
cat (get-text-property (point) 'org-category)
tags (get-text-property (point) 'tags)
tags (if force-tags
(car force-tags)
(get-text-property (point) 'tags))
new (org-format-agenda-item "x" newhead cat tags dotime 'noprefix)
pl (get-text-property (point) 'prefix-length)
undone-face (get-text-property (point) 'undone-face)
@ -5191,7 +5197,7 @@ the same tree node, and the headline of the tree node in the Org-mode file."
(buffer (marker-buffer hdmarker))
(pos (marker-position hdmarker))
(inhibit-read-only t)
newhead)
newhead tags)
(org-with-remote-undo buffer
(with-current-buffer buffer
(widen)
@ -5203,9 +5209,10 @@ the same tree node, and the headline of the tree node in the Org-mode file."
(org-flag-heading nil))) ; show the next heading
(goto-char pos)
(call-interactively 'org-set-tags)
(setq tags (org-get-tags-at))
(end-of-line 1)
(setq newhead (org-get-heading)))
(org-agenda-change-all-lines newhead hdmarker)
(org-agenda-change-all-lines newhead hdmarker nil nil (list tags))
(beginning-of-line 1)))))
(defun org-agenda-toggle-archive-tag ()
@ -5627,6 +5634,7 @@ belonging to the \"Work\" category."
(time-to-days (current-time))))
(files (org-agenda-files 'unrestricted)) entries file)
;; Get all entries which may contain an appt
(org-prepare-agenda-buffers files)
(while (setq file (pop files))
(setq entries
(append entries

View File

@ -5,7 +5,7 @@
;; Author: Carsten Dominik <carsten at orgmode dot org>
;; Keywords: outlines, hypermedia, calendar, wp
;; Homepage: http://orgmode.org
;; Version: 6.14
;; Version: 6.15a
;;
;; This file is part of GNU Emacs.
;;

View File

@ -4,7 +4,7 @@
;; Author: John Wiegley <johnw@newartisans.com>
;; Keywords: org data task
;; Version: 6.14
;; Version: 6.15a
;; This file is part of GNU Emacs.
;;

View File

@ -6,7 +6,7 @@
;; Thomas Baumann <thomas dot baumann at ch dot tum dot de>
;; Keywords: outlines, hypermedia, calendar, wp
;; Homepage: http://orgmode.org
;; Version: 6.14
;; Version: 6.15a
;;
;; This file is part of GNU Emacs.
;;

View File

@ -5,7 +5,7 @@
;; Author: Bastien Guerry <bzg at altern dot org>
;; Carsten Dominik <carsten dot dominik at gmail dot com>
;; Keywords: org, wp, remember
;; Version: 6.14
;; Version: 6.15a
;;
;; This file is part of GNU Emacs.
;;

View File

@ -5,7 +5,7 @@
;; Author: Carsten Dominik <carsten at orgmode dot org>
;; Keywords: outlines, hypermedia, calendar, wp
;; Homepage: http://orgmode.org
;; Version: 6.14
;; Version: 6.15a
;;
;; This file is part of GNU Emacs.
;;
@ -118,7 +118,8 @@ be visited."
(const :tag "Clock and history" t)
(const :tag "No persistence" nil)))
(defcustom org-clock-persist-file "~/.emacs.d/org-clock-save.el"
(defcustom org-clock-persist-file (convert-standard-filename
"~/.emacs.d/org-clock-save.el")
"File to save clock data to"
:group 'org-clock
:type 'string)

View File

@ -5,7 +5,7 @@
;; Author: Carsten Dominik <carsten at orgmode dot org>
;; Keywords: outlines, hypermedia, calendar, wp
;; Homepage: http://orgmode.org
;; Version: 6.14
;; Version: 6.15a
;;
;; This file is part of GNU Emacs.
;;

View File

@ -5,7 +5,7 @@
;; Author: Carsten Dominik <carsten at orgmode dot org>
;; Keywords: outlines, hypermedia, calendar, wp
;; Homepage: http://orgmode.org
;; Version: 6.14
;; Version: 6.15a
;;
;; This file is part of GNU Emacs.
;;
@ -284,7 +284,7 @@ that can be added."
(defun org-substring-no-properties (string &optional from to)
(if (featurep 'xemacs)
(org-no-properties (substring string from to))
(org-no-properties (substring string (or from 0) to))
(substring-no-properties string from to)))
(provide 'org-compat)

View File

@ -5,7 +5,7 @@
;; Author: Carsten Dominik <carsten at orgmode dot org>
;; Keywords: outlines, hypermedia, calendar, wp
;; Homepage: http://orgmode.org
;; Version: 6.14
;; Version: 6.15a
;;
;; This file is part of GNU Emacs.
;;
@ -545,7 +545,8 @@ Org-mode file."
table { border-collapse: collapse; }
td, th { vertical-align: top; }
dt { font-weight: bold; }
div.figure { padding: 0.5em; }
div.figure p { text-align: center; }
.org-info-js_info-navigation { border-style:none; }
#org-info-js_console-label { font-size:10px; font-weight:bold;
white-space:nowrap; }
@ -1432,6 +1433,8 @@ on this string to produce the exported version."
(let* ((htmlp (plist-get parameters :for-html))
(asciip (plist-get parameters :for-ascii))
(latexp (plist-get parameters :for-LaTeX))
(backend (cond (htmlp 'html) (latexp 'latex) (asciip 'ascii)))
(archived-trees (plist-get parameters :archived-trees))
(inhibit-read-only t)
(drawers org-drawers)
@ -1465,6 +1468,9 @@ on this string to produce the exported version."
;; Handle source code snippets
(org-export-replace-src-segments)
;; Find all headings and compute the targets for them
(setq target-alist (org-export-define-heading-targets target-alist))
;; Get rid of drawers
(org-export-remove-or-extract-drawers drawers
@ -1487,9 +1493,6 @@ on this string to produce the exported version."
;; Remove todo-keywords before exporting, if the user has requested so
(org-export-remove-headline-metadata parameters)
;; Find all headings and compute the targets for them
(setq target-alist (org-export-define-heading-targets target-alist))
;; Find targets in comments and move them out of comments,
;; but mark them as targets that should be invisible
(setq target-alist (org-export-handle-invisible-targets target-alist))
@ -1498,8 +1501,7 @@ on this string to produce the exported version."
(org-export-protect-examples (if asciip 'indent nil))
;; Protect backend specific stuff, throw away the others.
(org-export-select-backend-specific-text
(cond (htmlp 'html) (latexp 'latex) (asciip 'ascii)))
(org-export-select-backend-specific-text backend)
;; Protect quoted subtrees
(org-export-protect-quoted-subtrees)
@ -1510,10 +1512,13 @@ on this string to produce the exported version."
;; Blockquotes and verse
(org-export-mark-blockquote-and-verse)
;; Attach captions to the correct opject
(setq target-alist (org-export-attach-captions-and-attributes
backend target-alist))
;; Remove comment environment and comment subtrees
(org-export-remove-comment-blocks-and-subtrees)
;; Find matches for radio targets and turn them into internal links
(org-export-mark-radio-links)
@ -1571,18 +1576,22 @@ on this string to produce the exported version."
The new targets are added to TARGET-ALIST, which is also returned."
(goto-char (point-min))
(org-init-section-numbers)
(let ((re (concat "^" org-outline-regexp))
(let ((re (concat "^" org-outline-regexp
"\\| [ \t]*:ID:[ \t]*\\([^ \t\r\n]+\\)"))
level target)
(while (re-search-forward re nil t)
(setq level (org-reduced-level
(save-excursion (goto-char (point-at-bol))
(org-outline-level))))
(setq target (org-solidify-link-text
(format "sec-%s" (org-section-number level))))
(push (cons target target) target-alist)
(add-text-properties
(point-at-bol) (point-at-eol)
(list 'target target))))
(if (match-end 1)
(push (cons (org-match-string-no-properties 1)
target) target-alist)
(setq level (org-reduced-level
(save-excursion (goto-char (point-at-bol))
(org-outline-level))))
(setq target (org-solidify-link-text
(format "sec-%s" (org-section-number level))))
(push (cons target target) target-alist)
(add-text-properties
(point-at-bol) (point-at-eol)
(list 'target target)))))
target-alist)
(defun org-export-handle-invisible-targets (target-alist)
@ -1611,9 +1620,11 @@ Mark them as invisible targets."
target-alist)
(defun org-export-target-internal-links (target-alist)
"Find all internal links and assign target to them.
"Find all internal links and assign targets to them.
If a link has a fuzzy match (i.e. not a *dedicated* target match),
let the link point to the corresponding section."
let the link point to the corresponding section.
This function also handles the id links, if they have a match in
the current file."
(goto-char (point-min))
(while (re-search-forward org-bracket-link-regexp nil t)
(org-if-unprotected
@ -1625,6 +1636,8 @@ let the link point to the corresponding section."
(target
(cond
((cdr (assoc slink target-alist)))
((and (string-match "^id:" link)
(cdr (assoc (substring link 3) target-alist))))
((string-match org-link-types-re link) nil)
((or (file-name-absolute-p link)
(string-match "^\\." link))
@ -1748,17 +1761,15 @@ from the buffer."
(todo (plist-get opts :todo-keywords))
(tags (plist-get opts :tags))
(pri (plist-get opts :priority))
rpl)
(elts '(1 2 3 4 5))
rpl props)
(setq elts (delq nil (list 1 (if todo 2) (if pri 3) 4 (if tags 5))))
(when (or (not todo) (not tags) (not pri))
;; OK, something needs to be removed
(setq rpl (concat "\\1"
(if todo " \\2" "")
(if pri " \\3" "")
" \\4"
(if tags " \\5" "")))
(goto-char (point-min))
(while (re-search-forward re nil t)
(replace-match rpl t nil)))))
(setq rpl (mapconcat (lambda (i) (if (match-end i) (match-string i) ""))
elts " "))
(replace-match rpl t t)))))
(defun org-export-protect-quoted-subtrees ()
"Mark quoted subtrees with the protection property."
@ -1838,6 +1849,41 @@ These special cookies will later be interpreted by the backend."
"ORG-VERSE-END" "ORG-VERSE-START")
t t)))
(defun org-export-attach-captions-and-attributes (backend target-alist)
"Move #+CAPTION, #+ATTR_BACKEND, and #+LABEL text into text properties.
If the next thing following is a table, add the text properties to the first
table line. If it is a link, add it to the line containing the link."
(goto-char (point-min))
(remove-text-properties (point-min) (point-max)
'(org-caption nil org-attributes nil))
(let ((case-fold-search t)
(re (concat "^#\\+caption:[ \t]+\\(.*\\)"
"\\|"
"^#\\+attr_" (symbol-name backend) ":[ \t]+\\(.*\\)"
"\\|"
"^#\\+label:[ \t]+\\(.*\\)"
"\\|"
"^[ \t]*|[^-]"
"\\|"
"^[ \t]*\\[\\[.*\\]\\][ \t]*$"))
cap attr label)
(while (re-search-forward re nil t)
(cond
((match-end 1)
(setq cap (concat cap (if cap " " "") (org-trim (match-string 1)))))
((match-end 2)
(setq attr (concat attr (if attr " " "") (org-trim (match-string 2)))))
((match-end 3)
(setq label (org-trim (match-string 3))))
(t
(add-text-properties (point-at-bol) (point-at-eol)
(list 'org-caption cap
'org-attributes attr
'org-label label))
(if label (push (cons label label) target-alist))
(setq cap nil attr nil label nil)))))
target-alist)
(defun org-export-remove-comment-blocks-and-subtrees ()
"Remove the comment environment, and also commented subtrees."
(let ((re-commented (concat "^\\*+[ \t]+" org-comment-string "\\>"))
@ -3206,12 +3252,14 @@ lang=\"%s\" xml:lang=\"%s\">
;; Blockquotes and verse
(when (equal "ORG-BLOCKQUOTE-START" line)
(org-close-par-maybe)
(insert "<blockquote>\n<p>\n")
(throw 'nextline nil))
(when (equal "ORG-BLOCKQUOTE-END" line)
(insert "</p>\n</blockquote>\n")
(throw 'nextline nil))
(when (equal "ORG-VERSE-START" line)
(org-close-par-maybe)
(insert "\n<p class=\"verse\">\n")
(setq inverse t)
(throw 'nextline nil))
@ -3225,7 +3273,7 @@ lang=\"%s\" xml:lang=\"%s\">
(setq line (concat (mapconcat 'identity
(make-list (* 2 i) "\\nbsp") "")
" " (org-trim line))))
(setq line (concat line " \\\\"))))
(setq line (concat line "\\\\"))))
;; make targets to anchors
(while (string-match "<<<?\\([^<>]*\\)>>>?\\((INVISIBLE)\\)?[ \t]*\n?" line)
@ -3271,9 +3319,8 @@ lang=\"%s\" xml:lang=\"%s\">
(string-match "^\\.\\.?/" path)))
"file")
(t "internal")))
(setq path (org-extract-attributes path))
(setq attr (org-attributes-to-string
(get-text-property 0 'org-attributes path)))
(setq path (org-extract-attributes (org-link-unescape path)))
(setq attr (get-text-property 0 'org-attributes path))
(setq desc1 (if (match-end 5) (match-string 5 line))
desc2 (if (match-end 2) (concat type ":" path) path)
descp (and desc1 (not (equal desc1 desc2)))
@ -3302,10 +3349,8 @@ lang=\"%s\" xml:lang=\"%s\">
(if (and (or (eq t org-export-html-inline-images)
(and org-export-html-inline-images (not descp)))
(org-file-image-p path))
(setq rpl (concat "<img src=\"" type ":" path "\""
(if (string-match "\\<alt=" attr)
attr (concat attr " alt=\"" path "\""))
"/>"))
(setq rpl (org-export-html-format-image
(concat type ":" path)))
(setq link (concat type ":" path))
(setq rpl (concat "<a href=\""
(org-export-html-format-href link)
@ -3363,11 +3408,7 @@ lang=\"%s\" xml:lang=\"%s\">
(or (eq t org-export-html-inline-images)
(and org-export-html-inline-images
(not descp))))
(concat "<img src=\"" thefile "\""
(if (string-match "alt=" attr)
attr
(concat attr " alt=\""
thefile "\"")) "/>")
(org-export-html-format-image thefile)
(concat "<a href=\"" thefile "\"" attr ">"
(org-export-html-format-desc desc)
"</a>")))
@ -3668,6 +3709,22 @@ lang=\"%s\" xml:lang=\"%s\">
(org-html-do-expand s))
s))
(defun org-export-html-format-image (src)
"Create image tag with source and attributes."
(save-match-data
(let* ((caption (org-find-text-property-in-string 'org-caption src))
(attr (org-find-text-property-in-string 'org-attributes src))
(label (org-find-text-property-in-string 'org-label src)))
(format "<div %sclass=\"figure\">
<p><img src=\"%s\"%s></p>%s
</div>"
(if label (format "id=\"%s\" " label) "")
src
(if (string-match "\\<alt=" (or attr ""))
(concat " " attr )
(concat " " attr " alt=\"" src "\""))
(if caption (concat "\n<p>" caption "</p>") "")))))
(defvar org-table-colgroup-info nil)
(defun org-format-table-ascii (lines)
"Format a table for ascii export."
@ -3754,10 +3811,16 @@ lang=\"%s\" xml:lang=\"%s\">
;; column and the special lines
(setq lines (org-table-clean-before-export lines)))
(let ((head (and org-export-highlight-first-table-line
(let ((caption (or (get-text-property 0 'org-caption (car lines))
(get-text-property (or (next-single-property-change
0 'org-caption (car lines))
0)
'org-caption (car lines))))
(head (and org-export-highlight-first-table-line
(delq nil (mapcar
(lambda (x) (string-match "^[ \t]*|-" x))
(cdr lines)))))
(nlines 0) fnum i
tbopen line fields html gr colgropen)
(if splice (setq head nil))
@ -3814,6 +3877,7 @@ lang=\"%s\" xml:lang=\"%s\">
fnum "")
html)
(if colgropen (setq html (cons (car html) (cons "</colgroup>" (cdr html)))))
(if caption (push (format "<caption>%s</caption>" caption) html))
(push html-table-tag html))
(concat (mapconcat 'identity html "\n") "\n")))

View File

@ -4,7 +4,7 @@
;;
;; Emacs Lisp Archive Entry
;; Filename: org-export-latex.el
;; Version: 6.14
;; Version: 6.15a
;; Author: Bastien Guerry <bzg AT altern DOT org>
;; Maintainer: Bastien Guerry <bzg AT altern DOT org>
;; Keywords: org, wp, tex
@ -91,6 +91,7 @@
\\usepackage[utf8]{inputenc}
\\usepackage[T1]{fontenc}
\\usepackage{graphicx}
\\usepackage{longtable}
\\usepackage{hyperref}"
("\\section{%s}" . "\\section*{%s}")
("\\subsection{%s}" . "\\subsection*{%s}")
@ -102,6 +103,7 @@
\\usepackage[utf8]{inputenc}
\\usepackage[T1]{fontenc}
\\usepackage{graphicx}
\\usepackage{longtable}
\\usepackage{hyperref}"
("\\part{%s}" . "\\part*{%s}")
("\\chapter{%s}" . "\\chapter*{%s}")
@ -113,6 +115,7 @@
\\usepackage[utf8]{inputenc}
\\usepackage[T1]{fontenc}
\\usepackage{graphicx}
\\usepackage{longtable}
\\usepackage{hyperref}"
("\\part{%s}" . "\\part*{%s}")
("\\chapter{%s}" . "\\chapter*{%s}")
@ -163,8 +166,8 @@ to represent the section title."
("/" "\\emph{%s}" nil)
("_" "\\underline{%s}" nil)
("+" "\\texttt{%s}" nil)
("=" "\\texttt{%s}" nil)
("~" "\\texttt{%s}" t))
("=" "\\verb|%s|" nil)
("~" "\\verb|%s|" t))
"Alist of LaTeX expressions to convert emphasis fontifiers.
Each element of the list is a list of three elements.
The first element is the character used as a marker for fontification.
@ -357,6 +360,8 @@ when PUB-DIR is set, use this as the publishing directory."
(error "Need a file name to be able to export")))
(message "Exporting to LaTeX...")
(remove-text-properties (point-min) (point-max)
'(:org-license-to-kill nil))
(org-update-radio-target-regexp)
(org-export-latex-set-initial-vars ext-plist arg)
(let* ((wcf (current-window-configuration))
@ -404,11 +409,10 @@ when PUB-DIR is set, use this as the publishing directory."
(odd org-odd-levels-only)
(header (org-export-latex-make-header title opt-plist))
(skip (cond (subtree-p nil)
(region-p t)
;; never skip first lines when exporting a subtree
(region-p nil)
(t (plist-get opt-plist :skip-before-1st-heading))))
(text (plist-get opt-plist :text))
(first-lines (if skip "" (org-export-latex-first-lines)))
(first-lines (if skip "" (org-export-latex-first-lines rbeg)))
(coding-system (and (boundp 'buffer-file-coding-system)
buffer-file-coding-system))
(coding-system-for-write (or org-export-latex-coding-system
@ -420,17 +424,18 @@ when PUB-DIR is set, use this as the publishing directory."
(if region-p (region-end) (point-max))))
(string-for-export
(org-export-preprocess-string
region :emph-multiline t
:for-LaTeX t
:comments nil
:tags (plist-get opt-plist :tags)
:priority (plist-get opt-plist :priority)
:todo-keywords (plist-get opt-plist :todo-keywords)
:add-text (if (eq to-buffer 'string) nil text)
:skip-before-1st-heading skip
:select-tags (plist-get opt-plist :select-tags)
:exclude-tags (plist-get opt-plist :exclude-tags)
:LaTeX-fragments nil)))
region
:emph-multiline t
:for-LaTeX t
:comments nil
:tags (plist-get opt-plist :tags)
:priority (plist-get opt-plist :priority)
:todo-keywords (plist-get opt-plist :todo-keywords)
:add-text (if (eq to-buffer 'string) nil text)
:skip-before-1st-heading skip
:select-tags (plist-get opt-plist :select-tags)
:exclude-tags (plist-get opt-plist :exclude-tags)
:LaTeX-fragments nil)))
(set-buffer buffer)
(erase-buffer)
@ -452,12 +457,6 @@ when PUB-DIR is set, use this as the publishing directory."
(unless (or skip (eq to-buffer 'string))
(insert first-lines))
;; handle the case where the region does not begin with a section
(when region-p
(insert (with-temp-buffer
(insert string-for-export)
(org-export-latex-first-lines))))
;; export the content of headlines
(org-export-latex-global
(with-temp-buffer
@ -733,32 +732,33 @@ OPT-PLIST is the options plist for current buffer."
(when (and org-export-with-toc
(plist-get opt-plist :section-numbers))
(cond ((numberp toc)
(format "\\setcounter{tocdepth}{%s}\n\\tableofcontents\n\n"
(format "\\setcounter{tocdepth}{%s}\n\\tableofcontents\n\\vspace*{1cm}\n"
(min toc (plist-get opt-plist :headline-levels))))
(toc (format "\\setcounter{tocdepth}{%s}\n\\tableofcontents\n\n"
(toc (format "\\setcounter{tocdepth}{%s}\n\\tableofcontents\n\\vspace*{1cm}\n"
(plist-get opt-plist :headline-levels))))))))
(defun org-export-latex-first-lines (&optional comments)
(defun org-export-latex-first-lines (&optional beg)
"Export the first lines before first headline.
COMMENTS is either nil to replace them with the empty string or a
formatting string like %%%%s if we want to comment them out."
If BEG is non-nil, the is the beginning of he region."
(save-excursion
(goto-char (point-min))
(goto-char (or beg (point-min)))
(if (org-at-heading-p) (beginning-of-line 2))
(let* ((pt (point))
(end (if (and (re-search-forward "^\\* " nil t)
(not (eq pt (match-beginning 0))))
(end (if (re-search-forward "^\\*+ " nil t)
(goto-char (match-beginning 0))
(goto-char (point-max)))))
(org-export-latex-content
(org-export-preprocess-string
(buffer-substring (point-min) end)
:for-LaTeX t
:emph-multiline t
:add-text nil
:comments nil
:skip-before-1st-heading nil
:LaTeX-fragments nil)))))
(prog1
(org-export-latex-content
(org-export-preprocess-string
(buffer-substring pt end)
:for-LaTeX t
:emph-multiline t
:add-text nil
:comments nil
:skip-before-1st-heading nil
:LaTeX-fragments nil))
(add-text-properties pt (max pt (1- end))
'(:org-license-to-kill t))))))
(defun org-export-latex-content (content &optional exclude-list)
"Convert CONTENT string to LaTeX.
@ -855,8 +855,8 @@ links, keywords, lists, tables, fixed-width"
"Export quotation marks depending on language conventions."
(let* ((lang (plist-get org-export-latex-options-plist :language))
(quote-rpl (if (equal lang "fr")
'(("\\(\\s-\\)\"" "«~")
("\\(\\S-\\)\"" "")
'(("\\(\\s-\\)\"" "«~")
("\\(\\S-\\)\"" "")
("\\(\\s-\\)'" "`"))
'(("\\(\\s-\\)\"" "``")
("\\(\\S-\\)\"" "''")
@ -877,8 +877,9 @@ See the `org-export-latex.el' code for a complete conversion table."
(goto-char (point-min))
(while (re-search-forward c nil t)
;; Put the point where to check for org-protected
(unless (or (get-text-property (match-beginning 2) 'org-protected)
(org-at-table-p))
; (unless (or (get-text-property (match-beginning 2) 'org-protected);
; (org-at-table-p))
(unless (get-text-property (match-beginning 2) 'org-protected)
(cond ((member (match-string 2) '("\\$" "$"))
(if (equal (match-string 2) "\\$")
(replace-match (concat (match-string 1) "$"
@ -1035,14 +1036,27 @@ If TIMESTAMPS, convert timestamps, otherwise delete them."
(save-excursion (org-table-align))
(let* ((beg (org-table-begin))
(end (org-table-end))
(raw-table (buffer-substring-no-properties beg end))
fnum fields line lines olines gr colgropen line-fmt align)
(raw-table (buffer-substring beg end))
fnum fields line lines olines gr colgropen line-fmt align
caption label attr floatp longtblp)
(if org-export-latex-tables-verbatim
(let* ((tbl (concat "\\begin{verbatim}\n" raw-table
"\\end{verbatim}\n")))
(apply 'delete-region (list beg end))
(insert (org-export-latex-protect-string tbl)))
(progn
(setq caption (org-find-text-property-in-string
'org-caption raw-table)
attr (org-find-text-property-in-string
'org-attributes raw-table)
label (org-find-text-property-in-string
'org-label raw-table)
longtblp (and attr (stringp attr)
(string-match "\\<longtable\\>" attr))
align (and attr (stringp attr)
(string-match "\\<align=\\([^ \t\n\r,]+\\)" attr)
(match-string 1 attr))
floatp (or caption label))
(setq lines (split-string raw-table "\n" t))
(apply 'delete-region (list beg end))
(when org-export-table-remove-special-lines
@ -1076,10 +1090,11 @@ If TIMESTAMPS, convert timestamps, otherwise delete them."
(string-match "^\\(|\\)?\\(.+\\)|$" line-fmt))
(setq line-fmt (match-string 2 line-fmt)))
;; format alignment
(setq align (apply 'format
(cons line-fmt
(mapcar (lambda (x) (if x "r" "l"))
org-table-last-alignment))))
(unless align
(setq align (apply 'format
(cons line-fmt
(mapcar (lambda (x) (if x "r" "l"))
org-table-last-alignment)))))
;; prepare the table to send to orgtbl-to-latex
(setq lines
(mapcar
@ -1089,8 +1104,34 @@ If TIMESTAMPS, convert timestamps, otherwise delete them."
lines))
(when insert
(insert (org-export-latex-protect-string
(orgtbl-to-latex
lines `(:tstart ,(concat "\\begin{tabular}{" align "}"))))
(concat
(if longtblp
(concat "\\begin{longtable}{" align "}\n")
(if floatp "\\begin{table}[htb]\n"))
(if (or floatp longtblp)
(format
"\\caption{%s%s}"
(if label (concat "\\\label{" label "}") "")
(or caption "")))
(if longtblp "\\\\\n" "\n")
(if (not longtblp) "\\begin{center}\n")
(if (not longtblp) (concat "\\begin{tabular}{" align "}\n"))
(orgtbl-to-latex
lines
`(:tstart nil :tend nil
:hlend ,(if longtblp
(format "\\\\
\\hline
\\endhead
\\hline\\multicolumn{%d}{r}{Continued on next page}\\
\\endfoot
\\endlastfoot" (length org-table-last-alignment))
nil)))
(if (not longtblp) (concat "\n\\end{tabular}"))
(if longtblp "\n" "\n\\end{center}\n")
(if longtblp
"\\end{longtable}"
(if floatp "\\end{table}"))))
"\n\n")))))))
(defun org-export-latex-fontify ()
@ -1122,10 +1163,17 @@ If TIMESTAMPS, convert timestamps, otherwise delete them."
(goto-char (match-beginning 0))
(let* ((re-radio org-export-latex-all-targets-re)
(remove (list (match-beginning 0) (match-end 0)))
(type (match-string 2))
(raw-path (org-extract-attributes (match-string 3)))
(full-raw-path (concat (match-string 1) raw-path))
(desc (match-string 5))
(type (or (match-string 2)
(if (or (file-name-absolute-p raw-path)
(string-match "^\\.\\.?/" raw-path))
"file")))
(caption (org-find-text-property-in-string 'org-caption raw-path))
(attr (org-find-text-property-in-string 'org-attributes raw-path))
(label (org-find-text-property-in-string 'org-label raw-path))
(floatp (or label caption))
imgp radiop
;; define the path of the link
(path (cond
@ -1137,7 +1185,8 @@ If TIMESTAMPS, convert timestamps, otherwise delete them."
(concat type ":" raw-path))
((equal type "file")
(if (and (or (org-file-image-p (expand-file-name raw-path))
(string-match "\\.eps$" raw-path))
(string-match "\\.\\(pdf\\|jpg\\|ps\\|eps\\)$"
raw-path))
(equal desc full-raw-path))
(setq imgp t)
(progn (when (string-match "\\(.+\\)::.+" raw-path)
@ -1150,10 +1199,17 @@ If TIMESTAMPS, convert timestamps, otherwise delete them."
;; process with link inserting
(apply 'delete-region remove)
(cond ((and imgp (plist-get org-export-latex-options-plist :inline-images))
(insert (format "\\includegraphics[%s]{%s}"
;; image option should be set be a comment line
org-export-latex-image-default-option
(expand-file-name raw-path))))
(insert
(concat
(if floatp "\\begin{figure}[htb]\n")
(format "\\centerline{\\includegraphics[%s]{%s}}\n"
(or attr org-export-latex-image-default-option)
(expand-file-name raw-path))
(if floatp
(format "\\caption{%s%s}\n"
(if label (concat "\\label{" label "}"))
(or caption "")))
(if floatp "\\end{figure}\n"))))
(radiop (insert (format "\\hyperref[%s]{%s}"
(org-solidify-link-text raw-path) desc)))
((not type)
@ -1167,7 +1223,6 @@ If TIMESTAMPS, convert timestamps, otherwise delete them."
(defun org-export-latex-preprocess ()
"Clean stuff in the LaTeX export."
;; Preserve line breaks
(goto-char (point-min))
(while (re-search-forward "\\\\\\\\" nil t)

View File

@ -5,7 +5,7 @@
;; Author: Carsten Dominik <carsten at orgmode dot org>
;; Keywords: outlines, hypermedia, calendar, wp
;; Homepage: http://orgmode.org
;; Version: 6.14
;; Version: 6.15a
;;
;; This file is part of GNU Emacs.
;;

View File

@ -6,7 +6,7 @@
;; Tassilo Horn <tassilo at member dot fsf dot org>
;; Keywords: outlines, hypermedia, calendar, wp
;; Homepage: http://orgmode.org
;; Version: 6.14
;; Version: 6.15a
;;
;; This file is part of GNU Emacs.
;;
@ -74,11 +74,11 @@ If `org-store-link' was called with a prefix arg the meaning of
(if (and (string-match "^nntp" group) ;; Only for nntp groups
(org-xor current-prefix-arg
org-gnus-prefer-web-links))
(concat (if (string-match "gmane" unprefixed-group)
"http://news.gmane.org/"
"http://groups.google.com/group/")
unprefixed-group)
(concat "gnus:" group))))
(org-make-link (if (string-match "gmane" unprefixed-group)
"http://news.gmane.org/"
"http://groups.google.com/group/")
unprefixed-group)
(org-make-link "gnus:" group))))
(defun org-gnus-article-link (group newsgroups message-id x-no-archive)
"Create a link to a Gnus article.
@ -98,8 +98,7 @@ If `org-store-link' was called with a prefix arg the meaning of
(format (if (string-match "gmane\\." newsgroups)
"http://mid.gmane.org/%s"
"http://groups.google.com/groups/search?as_umsgid=%s")
(org-fixup-message-id-for-http
(replace-regexp-in-string "[<>]" "" message-id)))
(org-fixup-message-id-for-http message-id))
(org-make-link "gnus:" group "#" message-id)))
(defun org-gnus-store-link ()
@ -115,7 +114,7 @@ If `org-store-link' was called with a prefix arg the meaning of
(unless group (error "Not on a group"))
(org-store-link-props :type "gnus" :group group)
(setq desc (org-gnus-group-link group)
link (org-make-link desc))
link desc)
(org-add-link-props :link link :description desc)
link))
@ -127,7 +126,8 @@ If `org-store-link' was called with a prefix arg the meaning of
(goto-char (point-min))
(mail-header-extract-no-properties)))
(from (mail-header 'from header))
(message-id (mail-header 'message-id header))
(message-id (org-remove-angle-brackets
(mail-header 'message-id header)))
(date (mail-header 'date header))
(to (mail-header 'to header))
(newsgroups (mail-header 'newsgroups header))
@ -149,6 +149,10 @@ If `org-store-link' was called with a prefix arg the meaning of
(error "Error in Gnus link"))
(setq group (match-string 1 path)
article (match-string 3 path))
(when group
(setq group (org-substring-no-properties group)))
(when article
(setq article (org-substring-no-properties article)))
(org-gnus-follow-link group article)))
(defun org-gnus-follow-link (&optional group article)
@ -156,13 +160,28 @@ If `org-store-link' was called with a prefix arg the meaning of
(require 'gnus)
(funcall (cdr (assq 'gnus org-link-frame-setup)))
(if gnus-other-frame-object (select-frame gnus-other-frame-object))
(when group
(setq group (org-substring-no-properties group)))
(when article
(setq article (org-substring-no-properties article)))
(cond ((and group article)
(gnus-group-read-group 1 nil group)
(gnus-summary-goto-article
(if (string-match "[^0-9]" article)
article
(string-to-number article))
nil t))
(gnus-activate-group group t)
(condition-case nil
(let ((articles 1)
group-opened)
(while (and (not group-opened)
;; stop on integer overflows
(> articles 0))
(setq group-opened (gnus-group-read-group articles nil group)
articles (if (< articles 16)
(1+ articles)
(* articles 2))))
(if group-opened
(gnus-summary-goto-article article nil t)
(message "Couldn't follow gnus link. %s"
"The summary couldn't be opened.")))
(quit (message "Couldn't follow gnus link. %s"
"The linked group is empty."))))
(group (gnus-group-jump-to-group group))))
(defun org-gnus-no-new-news ()

View File

@ -1,10 +1,10 @@
;;; org-id.el --- Global identifier for Org-mode entries
;;; org-id.el --- Global identifiers for Org-mode entries
;; Copyright (C) 2008 Free Software Foundation, Inc.
;;
;; Author: Carsten Dominik <carsten at orgmode dot org>
;; Keywords: outlines, hypermedia, calendar, wp
;; Homepage: http://orgmode.org
;; Version: 6.14
;; Version: 6.15a
;;
;; This file is part of GNU Emacs.
;;
@ -35,7 +35,7 @@
;; Org has a builtin method that uses a compact encoding of the creation
;; time of the ID, with microsecond accuracy. This virtually
;; guarantees globally unique identifiers, even if several people are
;; creating ID's at the same time in files that will eventually be used
;; creating IDs at the same time in files that will eventually be used
;; together. As an exernal method `uuidgen' is supported, if installed
;; on the system.
;;
@ -78,17 +78,26 @@
:tag "Org ID"
:group 'org)
(defcustom org-id-method 'org
"The method that should be used to create new ID's.
An ID will consist of the prefix specified in `org-id-prefix', and a unique
part created by the method this variable specifies.
(defcustom org-id-method
(condition-case nil
(if (string-match "\\`[-0-9a-fA-F]\\{36\\}\\'"
(org-trim (shell-command-to-string "uuidgen")))
'uuidgen
'org)
(error 'org))
"The method that should be used to create new IDs.
If `uuidgen' is available on the system, it will be used as the default method.
if not. the methd `org' is used.
An ID will consist of the optional prefix specified in `org-id-prefix',
and a unique part created by the method this variable specifies.
Allowed values are:
org Org's own internal method, using an encoding of the current time,
and the current domain of the computer. This method will
honor the variable `org-id-include-domain'.
org Org's own internal method, using an encoding of the current time to
microsecond accuracy, and optionally the current domain of the
computer. See the variable `org-id-include-domain'.
uuidgen Call the external command uuidgen."
:group 'org-id
@ -107,26 +116,54 @@ to have no space characters in them."
(const :tag "No prefix")
(string :tag "Prefix")))
(defcustom org-id-include-domain t
(defcustom org-id-include-domain nil
"Non-nil means, add the domain name to new IDs.
This ensures global uniqueness of ID's, and is also suggested by
This ensures global uniqueness of IDs, and is also suggested by
RFC 2445 in combination with RFC 822. This is only relevant if
`org-id-method' is `org'. When uuidgen is used, the domain will never
be added."
be added.
The default is to not use this because we have no really good way to get
the true domain, and Org entries will normally not be shared with enough
people to make this necessary."
:group 'org-id
:type 'boolean)
(defcustom org-id-track-globally t
"Non-nil means, track IDs trhough files, so that links work globally.
This work by maintaining a hash table for IDs and writing this table
to disk when exiting Emacs. Because of this, it works best if you use
a single Emacs process, not many.
When nil, IDs are not tracked. Links to IDs will still work within
a buffer, but not if the entry is located in another file.
IDs can still be used if the entry with the id is in the same file as
the link."
:group 'org-id
:type 'boolean)
(defcustom org-id-locations-file (convert-standard-filename
"~/.org-id-locations")
"The file for remembering the last ID number generated."
"~/.emacs.d/.org-id-locations")
"The file for remembering in which file an ID was defined.
This variable is only relevant when `org-id-track-globally' is set."
:group 'org-id
:type 'file)
(defvar org-id-locations nil
"List of files with ID's in those files.")
"List of files with IDs in those files.
Depending on `org-id-use-hash' this can also be a hash table mapping IDs
to files.")
(defvar org-id-files nil
"List of files that contain IDs.")
(defcustom org-id-extra-files 'org-agenda-text-search-extra-files
"Files to be searched for ID's, besides the agenda files."
"Files to be searched for IDs, besides the agenda files.
When Org reparses files to remake the list of files and IDs it is tracking,
it will normally scan the agenda files, the archives related to agenda files,
any files that are listed as ID containing in the current register, and
any Org-mode files currently visited by Emacs.
You can list additional files here.
This variable is only relevant when `org-id-track-globally' is set."
:group 'org-id
:type
'(choice
@ -134,6 +171,14 @@ be added."
(repeat :tag "List of files"
(file))))
(defcustom org-id-search-archives t
"Non-nil means, search also the archive files of agenda files for entries.
This is a possibility to reduce overhead, but it measn that entries moved
to the archives can no longer be found by ID.
This variable is only relevant when `org-id-track-globally' is set."
:group 'org-id
:type 'boolean)
;;; The API functions
;;;###autoload
@ -202,7 +247,7 @@ It returns the ID of the entry. If necessary, the ID is created."
(defun org-id-goto (id)
"Switch to the buffer containing the entry with id ID.
Move the cursor to that entry in that buffer."
(interactive)
(interactive "sID: ")
(let ((m (org-id-find id 'marker)))
(unless m
(error "Cannot find entry with ID \"%s\"" id))
@ -326,77 +371,163 @@ and time is the usual three-integer representation of time."
;; Storing ID locations (files)
(defun org-id-update-id-locations ()
"Scan relevant files for ID's.
Store the relation between files and corresponding ID's."
(defun org-id-update-id-locations (&optional files)
"Scan relevant files for IDs.
Store the relation between files and corresponding IDs.
This will scan all agenda files, all associated archives, and all
files currently mentioned in `org-id-locations'.
When FILES is given, scan these files instead.
When CHECK is given, prepare detailed iinformation about duplicate IDs."
(interactive)
(let ((files (append (org-agenda-files)
(if (symbolp org-id-extra-files)
(symbol-value org-id-extra-files)
org-id-extra-files)))
org-agenda-new-buffers
file ids reg found id)
(while (setq file (pop files))
(setq ids nil)
(with-current-buffer (org-get-agenda-file-buffer file)
(save-excursion
(save-restriction
(widen)
(goto-char (point-min))
(while (re-search-forward "^[ \t]*:ID:[ \t]+\\(\\S-+\\)[ \t]*$"
nil t)
(setq id (org-match-string-no-properties 1))
(if (member id found)
(error "Duplicate ID \"%s\"" id))
(push id found)
(push id ids))
(push (cons file ids) reg)))))
(org-release-buffers org-agenda-new-buffers)
(setq org-agenda-new-buffers nil)
(setq org-id-locations reg)
(org-id-locations-save)))
(if (not org-id-track-globally)
(error "Please turn on `org-id-track-globally' if you want to track IDs.")
(let ((files
(or files
(append
;; Agenda files and all associated archives
(org-agenda-files t org-id-search-archives)
;; Explicit extra files
(if (symbolp org-id-extra-files)
(symbol-value org-id-extra-files)
org-id-extra-files)
;; Files associated with live org-mode buffers
(delq nil
(mapcar (lambda (b)
(with-current-buffer b
(and (org-mode-p) (buffer-file-name))))
(buffer-list)))
;; All files known to have IDs
org-id-files)))
org-agenda-new-buffers
file nfiles tfile ids reg found id seen (ndup 0))
(setq nfiles (length files))
(while (setq file (pop files))
(message "Finding ID locations (%d/%d files): %s"
(- nfiles (length files)) nfiles file)
(setq tfile (file-truename file))
(when (and (file-exists-p file) (not (member tfile seen)))
(push tfile seen)
(setq ids nil)
(with-current-buffer (org-get-agenda-file-buffer file)
(save-excursion
(save-restriction
(widen)
(goto-char (point-min))
(while (re-search-forward "^[ \t]*:ID:[ \t]+\\(\\S-+\\)[ \t]*$"
nil t)
(setq id (org-match-string-no-properties 1))
(if (member id found)
(progn
(message "Duplicate ID \"%s\", also in file %s"
id (car (delq
nil
(mapcar
(lambda (x)
(if (member id (cdr x)) (car x)))
reg))))
(when (= ndup 0)
(ding)
(sit-for 2))
(setq ndup (1+ ndup)))
(push id found)
(push id ids)))
(push (cons (abbreviate-file-name file) ids) reg))))))
(org-release-buffers org-agenda-new-buffers)
(setq org-agenda-new-buffers nil)
(setq org-id-locations reg)
(setq org-id-files (mapcar 'car org-id-locations))
(org-id-locations-save) ;; this function can also handle the alist form
;; now convert to a hash
(setq org-id-locations (org-id-alist-to-hash org-id-locations))
(if (> ndup 0)
(message "WARNING: %d duplicate IDs found, check *Messages* buffer" ndup)
(message "%d unique files scanned for IDs" (length org-id-files)))
org-id-locations)))
(defun org-id-locations-save ()
"Save `org-id-locations' in `org-id-locations-file'."
(with-temp-file org-id-locations-file
(print org-id-locations (current-buffer))))
(when org-id-track-globally
(let ((out (if (hash-table-p org-id-locations)
(org-id-hash-to-alist org-id-locations)
org-id-locations)))
(with-temp-file org-id-locations-file
(print out (current-buffer))))))
(defun org-id-locations-load ()
"Read the data from `org-id-locations-file'."
(setq org-id-locations nil)
(with-temp-buffer
(condition-case nil
(progn
(insert-file-contents-literally org-id-locations-file)
(goto-char (point-min))
(setq org-id-locations (read (current-buffer))))
(error
(message "Could not read org-id-values from %s. Setting it to nil."
org-id-locations-file)))))
(when org-id-track-globally
(with-temp-buffer
(condition-case nil
(progn
(insert-file-contents-literally org-id-locations-file)
(goto-char (point-min))
(setq org-id-locations (read (current-buffer))))
(error
(message "Could not read org-id-values from %s. Setting it to nil."
org-id-locations-file))))
(setq org-id-files (mapcar 'car org-id-locations))
(setq org-id-locations (org-id-alist-to-hash org-id-locations))))
(defun org-id-add-location (id file)
"Add the ID with location FILE to the database of ID loations."
(when (and id file) ; don't error when called from a buffer with no file
;; Only if global tracking is on, and when the buffer has a file
(when (and org-id-track-globally id file)
(unless org-id-locations (org-id-locations-load))
(catch 'exit
(let ((locs org-id-locations) list)
(while (setq list (pop locs))
(when (equal (file-truename file) (file-truename (car list)))
(setcdr list (cons id (cdr list)))
(throw 'exit t))))
(push (list file id) org-id-locations))
(org-id-locations-save)))
(puthash id (abbreviate-file-name file) org-id-locations)
(add-to-list 'org-id-files (abbreviate-file-name file))))
(add-hook 'kill-emacs-hook 'org-id-locations-save)
(defun org-id-hash-to-alist (hash)
"Turn an org-id hash into an alist, so that it can be written to a file."
(let (res x)
(maphash
(lambda (k v)
(if (setq x (member v res))
(setcdr x (cons k (cdr x)))
(push (list v k) res)))
hash)
res))
(defun org-id-alist-to-hash (list)
"Turn an org-id location list into a hash table."
(let ((res (make-hash-table
:test 'equal
:size (apply '+ (mapcar 'length list))))
f i)
(mapc
(lambda (x)
(setq f (car x))
(mapc (lambda (i) (puthash i f res)) (cdr x)))
list)
res))
(defun org-id-paste-tracker (txt &optional buffer-or-file)
"Update any IDs in TXT and assign BUFFER-OR-FILE to them."
(when org-id-track-globally
(save-match-data
(setq buffer-or-file (or buffer-or-file (current-buffer)))
(when (bufferp buffer-or-file)
(setq buffer-or-file (or (buffer-base-buffer buffer-or-file)
buffer-or-file))
(setq buffer-or-file (buffer-file-name buffer-or-file)))
(when buffer-or-file
(let ((fname (abbreviate-file-name buffer-or-file))
(s 0))
(while (string-match "^[ \t]*:ID:[ \t]+\\([^ \t\n\r]+\\)" txt s)
(setq s (match-end 0))
(org-id-add-location (match-string 1 txt) fname)))))))
;; Finding entries with specified id
(defun org-id-find-id-file (id)
"Query the id database for the file in which this ID is located."
(unless org-id-locations (org-id-locations-load))
(catch 'found
(mapc (lambda (x) (if (member id (cdr x))
(throw 'found (car x))))
org-id-locations)
nil))
(or (gethash id org-id-locations)
;; ball back on current buffer
(buffer-file-name (or (buffer-base-buffer (current-buffer))
(current-buffer)))))
(defun org-id-find-id-in-file (id file &optional markerp)
"Return the position of the entry ID in FILE.
@ -415,8 +546,41 @@ optional argument MARKERP, return the position as a new marker."
(move-marker (make-marker) pos buf)
(cons file pos))))))))
;; id link type
;; Calling the following function is hard-coded into `org-store-link',
;; so we do have to add it to `org-store-link-functions'.
(defun org-id-store-link ()
"Store a link to the current entry, using it's ID."
(interactive)
(let* ((link (org-make-link "id:" (org-id-get-create)))
(desc (save-excursion
(org-back-to-heading t)
(or (and (looking-at org-complex-heading-regexp)
(if (match-end 4) (match-string 4) (match-string 0)))
link))))
(org-store-link-props :link link :description desc :type "id")
link))
(defun org-id-open (id)
"Go to the entry with id ID."
(org-mark-ring-push)
(let ((m (org-id-find id 'marker)))
(unless m
(error "Cannot find entry with ID \"%s\"" id))
(if (not (equal (current-buffer) (marker-buffer m)))
(switch-to-buffer-other-window (marker-buffer m)))
(goto-char m)
(move-marker m nil)
(org-show-context)))
(org-add-link-type "id" 'org-id-open)
(provide 'org-id)
;;; org-id.el ends here
;; arch-tag: e5abaca4-e16f-4b25-832a-540cfb63a712

View File

@ -5,7 +5,7 @@
;; Author: Carsten Dominik <carsten at orgmode dot org>
;; Keywords: outlines, hypermedia, calendar, wp
;; Homepage: http://orgmode.org
;; Version: 6.14
;; Version: 6.15a
;;
;; This file is part of GNU Emacs.
;;

View File

@ -4,7 +4,7 @@
;;
;; Author: Philip Jackson <emacs@shellarchive.co.uk>
;; Keywords: erc, irc, link, org
;; Version: 6.14
;; Version: 6.15a
;;
;; This file is part of GNU Emacs.
;;

View File

@ -5,7 +5,7 @@
;; Author: Carsten Dominik <carsten at orgmode dot org>
;; Keywords: outlines, hypermedia, calendar, wp
;; Homepage: http://orgmode.org
;; Version: 6.14
;; Version: 6.15a
;;
;; This file is part of GNU Emacs.
;;

View File

@ -6,7 +6,7 @@
;; Bastien Guerry <bzg AT altern DOT org>
;; Keywords: outlines, hypermedia, calendar, wp
;; Homepage: http://orgmode.org
;; Version: 6.14
;; Version: 6.15a
;;
;; This file is part of GNU Emacs.
;;

View File

@ -3,7 +3,7 @@
;; Copyright (C) 2008 Free Software Foundation, Inc.
;; Author: John Wiegley <johnw@gnu.org>
;; Version: 6.14
;; Version: 6.15a
;; Keywords: outlines, hypermedia, calendar, wp
;; This file is part of GNU Emacs.

View File

@ -5,7 +5,7 @@
;; Author: Carsten Dominik <carsten at orgmode dot org>
;; Keywords: outlines, hypermedia, calendar, wp
;; Homepage: http://orgmode.org
;; Version: 6.14
;; Version: 6.15a
;;
;; This file is part of GNU Emacs.
;;

View File

@ -5,7 +5,7 @@
;; Author: Tokuya Kameshima <kames at fa2 dot so-net dot ne dot jp>
;; Keywords: outlines, hypermedia, calendar, wp
;; Homepage: http://orgmode.org
;; Version: 6.14
;; Version: 6.15a
;; This file is part of GNU Emacs.

View File

@ -5,7 +5,7 @@
;; Author: Thomas Baumann <thomas dot baumann at ch dot tum dot de>
;; Keywords: outlines, hypermedia, calendar, wp
;; Homepage: http://orgmode.org
;; Version: 6.14
;; Version: 6.15a
;;
;; This file is part of GNU Emacs.
;;

View File

@ -4,7 +4,7 @@
;;
;; Author: Piotr Zielinski <piotr dot zielinski at gmail dot com>
;; Maintainer: Carsten Dominik <carsten at orgmode dot org>
;; Version: 6.14
;; Version: 6.15a
;;
;; This file is part of GNU Emacs.
;;

View File

@ -5,7 +5,7 @@
;; Author: Eric Schulte <schulte dot eric at gmail dot com>
;; Keywords: tables, plotting
;; Homepage: http://orgmode.org
;; Version: 6.14
;; Version: 6.15a
;;
;; This file is part of GNU Emacs.
;;

View File

@ -4,7 +4,7 @@
;; Author: David O'Toole <dto@gnu.org>
;; Maintainer: Bastien Guerry <bzg AT altern DOT org>
;; Keywords: hypermedia, outlines, wp
;; Version: 6.14
;; Version: 6.15a
;; This file is part of GNU Emacs.
;;

View File

@ -5,7 +5,7 @@
;; Author: Carsten Dominik <carsten at orgmode dot org>
;; Keywords: outlines, hypermedia, calendar, wp
;; Homepage: http://orgmode.org
;; Version: 6.14
;; Version: 6.15a
;;
;; This file is part of GNU Emacs.
;;

View File

@ -5,7 +5,7 @@
;; Author: Carsten Dominik <carsten at orgmode dot org>
;; Keywords: outlines, hypermedia, calendar, wp
;; Homepage: http://orgmode.org
;; Version: 6.14
;; Version: 6.15a
;;
;; This file is part of GNU Emacs.
;;

View File

@ -5,7 +5,7 @@
;; Author: Carsten Dominik <carsten at orgmode dot org>
;; Keywords: outlines, hypermedia, calendar, wp
;; Homepage: http://orgmode.org
;; Version: 6.14
;; Version: 6.15a
;;
;; This file is part of GNU Emacs.
;;
@ -1897,7 +1897,8 @@ For all numbers larger than LIMIT, shift them by DELTA."
(beginning-of-line 2)
(setq l (1+ l)))
(setq org-table-current-line-types (apply 'vector (nreverse types))
org-table-dlines (apply 'vector (cons nil (nreverse dlines)))
org-table-dlines (apply 'vector (cons (car dlines)
(nreverse dlines)))
org-table-hlines (apply 'vector (cons nil (nreverse hlines)))))))
(defun org-table-maybe-eval-formula ()
@ -2360,12 +2361,17 @@ LISPP means to return something appropriate for a Lisp list."
(defun org-table-recalculate (&optional all noalign)
"Recalculate the current table line by applying all stored formulas.
With prefix arg ALL, do this for all lines in the table."
With prefix arg ALL, do this for all lines in the table.
With the prefix argument ALL is `(16)' (a double `C-c C-u' prefix), or if
it is the symbol `iterate', recompute the table until it no longer changes.
If NOALIGN is not nil, do not re-align the table after the computations
are done. This is typically used internally to save time, if it is
known that the table will be realigned a little later anyway."
(interactive "P")
(or (memq this-command org-recalc-commands)
(setq org-recalc-commands (cons this-command org-recalc-commands)))
(unless (org-at-table-p) (error "Not at a table"))
(if (equal all '(16))
(if (or (eq all 'iterate) (equal all '(16)))
(org-table-iterate)
(org-table-get-specials)
(let* ((eqlist (sort (org-table-get-stored-formulas)
@ -3865,9 +3871,15 @@ directly by `orgtbl-send-table'. See manual."
;; Do we have a heading section? If so, format it and handle the
;; trailing hline.
(if (and (not splicep) (listp (car *orgtbl-table*))
(memq 'hline *orgtbl-table*))
(if (and (not splicep)
(or (consp (car *orgtbl-table*))
(consp (nth 1 *orgtbl-table*)))
(memq 'hline (cdr *orgtbl-table*)))
(progn
(when (eq 'hline (car *orgtbl-table*))
;; there is a hline before the first data line
(and hline (push hline *orgtbl-rtn*))
(pop *orgtbl-table*))
(let* ((*orgtbl-lstart* (or (plist-get params :hlstart)
*orgtbl-lstart*))
(*orgtbl-llstart* (or (plist-get params :hllstart)

View File

@ -5,7 +5,7 @@
;; Author: Carsten Dominik <carsten at orgmode dot org>
;; Keywords: outlines, hypermedia, calendar, wp
;; Homepage: http://orgmode.org
;; Version: 6.14
;; Version: 6.15a
;;
;; This file is part of GNU Emacs.
;;

View File

@ -5,7 +5,7 @@
;; Author: Carsten Dominik <carsten at orgmode dot org>
;; Keywords: outlines, hypermedia, calendar, wp
;; Homepage: http://orgmode.org
;; Version: 6.14
;; Version: 6.15a
;;
;; This file is part of GNU Emacs.
;;

View File

@ -5,7 +5,7 @@
;; Author: Andy Stewart <lazycat dot manatee at gmail dot com>
;; Keywords: outlines, hypermedia, calendar, wp
;; Homepage: http://orgmode.org
;; Version: 6.14
;; Version: 6.15a
;;
;; This file is part of GNU Emacs.
;;

View File

@ -5,7 +5,7 @@
;; Author: Tokuya Kameshima <kames at fa2 dot so-net dot ne dot jp>
;; Keywords: outlines, hypermedia, calendar, wp
;; Homepage: http://orgmode.org
;; Version: 6.14
;; Version: 6.15a
;;
;; This file is part of GNU Emacs.
;;

View File

@ -5,7 +5,7 @@
;; Author: Carsten Dominik <carsten at orgmode dot org>
;; Keywords: outlines, hypermedia, calendar, wp
;; Homepage: http://orgmode.org
;; Version: 6.14
;; Version: 6.15a
;;
;; This file is part of GNU Emacs.
;;
@ -92,7 +92,7 @@
;;; Version
(defconst org-version "6.14"
(defconst org-version "6.15a"
"The version number of the file org.el.")
(defun org-version (&optional here)
@ -162,7 +162,7 @@ to add the symbol `xyz', and the package must have a call to
(const :tag " bbdb: Links to BBDB entries" org-bbdb)
(const :tag " bibtex: Links to BibTeX entries" org-bibtex)
(const :tag " gnus: Links to GNUS folders/messages" org-gnus)
(const :tag " id: Global id's for identifying entries" org-id)
(const :tag " id: Global IDs for identifying entries" org-id)
(const :tag " info: Links to Info nodes" org-info)
(const :tag " jsinfo: Set up Sebastian Rose's JavaScript org-info.js" org-jsinfo)
(const :tag " irc: Links to IRC/ERC chat sessions" org-irc)
@ -178,13 +178,13 @@ to add the symbol `xyz', and the package must have a call to
(const :tag "C annotate-file: Annotate a file with org syntax" org-annotate-file)
(const :tag "C annotation-helper: Call Remeber directly from Browser" org-annotation-helper)
(const :tag "C bookmark: Org links to bookmarks" org-bookmark)
(const :tag "C browser-url: Store link, directly from Browser" org-browser-url)
(const :tag "C depend: TODO dependencies for Org-mode" org-depend)
(const :tag "C elisp-symbol: Org links to emacs-lisp symbols" org-elisp-symbol)
(const :tag "C eval: Include command output as text" org-eval)
(const :tag "C eval-light: Evaluate inbuffer-code on demand" org-eval-light)
(const :tag "C expiry: Expiry mechanism for Org entries" org-expiry)
(const :tag "C exp-blocks: Pre-process blocks for export" org-exp-blocks)
(const :tag "C id: Global id's for identifying entries" org-id)
(const :tag "C interactive-query: Interactive modification of tags query" org-interactive-query)
(const :tag "C mairix: Hook mairix search into Org for different MUAs" org-mairix)
(const :tag "C man: Support for links to manpages in Org-mode" org-man)
@ -956,6 +956,40 @@ It should match if the message is from the user him/herself."
:group 'org-link-store
:type 'regexp)
(defcustom org-link-to-org-use-id 'create-if-interactive
"Non-nil means, storing a link to an Org file will use entry IDs.
Note that before this variable is even considered, org-id must be loaded,
to please customize `org-modules' and turn it on.
The variable can have the following values:
t Create an ID if needed to make a link to the current entry.
create-if-interactive
If `org-store-link' is called directly (interactively, as a user
command), do create an ID to support the link. But when doing the
job for remember, only use the ID if it already exists. The
purpose of this setting is to avoid proliferation of unwanted
IDs, just because you happen to be in an Org file when you
call `org-remember' that automatically and preemptively
creates a link. If you do want to get an ID link in a remember
template to an entry not having an ID, create it first by
explicitly creating a link to it, using `C-c C-l' first.
use-existing
Use existing ID, do not create one.
nil Never use an ID to make a link, instead link using a text search for
the headline text."
:group 'org-link-store
:type '(choice
(const :tag "Create ID to make link" t)
(const :tag "Create if string link interactively"
'create-if-interactive)
(const :tag "Only use existing" 'use-existing)
(const :tag "Do not use ID to create link" nil)))
(defcustom org-context-in-file-links t
"Non-nil means, file links from `org-store-link' contain context.
A search string will be added to the file name with :: as separator and
@ -1283,6 +1317,11 @@ outline-path-completion Headlines in the current buffer are offered via
(const :tag "Outline" outline)
(const :tag "Outline-path-completion" outline-path-completion)))
(defcustom org-goto-max-level 5
"Maximum level to be considered when running org-goto with refile interface."
:group 'org-refile
:type 'number)
(defcustom org-reverse-note-order nil
"Non-nil means, store new notes at the beginning of a file or entry.
When nil, new notes will be filed to the end of a file or entry.
@ -1515,14 +1554,22 @@ or `done', meaning any not-done or done state, respectively."
(choice (const :tag "Add" t) (const :tag "Remove" nil)))))))
(defcustom org-log-done nil
"Non-nil means, record a CLOSED timestamp when moving an entry to DONE.
When equal to the list (done), also prompt for a closing note.
This can also be configured on a per-file basis by adding one of
the following lines anywhere in the buffer:
"Information to record when a task moves to the DONE state.
Possible values are:
nil Don't add anything, just change the keyword
time Add a time stamp to the task
note Prompt a closing note and add it with template `org-log-note-headings'
This option can also be set with on a per-file-basis with
#+STARTUP: nologdone
#+STARTUP: logdone
#+STARTUP: lognotedone
#+STARTUP: nologdone"
You can have local logging settings for a subtree by setting the LOGGING
property to one or more of these keywords."
:group 'org-todo
:group 'org-progress
:type '(choice
@ -2806,11 +2853,12 @@ collapsed state."
;; Autoload ID code
(declare-function org-id-store-link "org-id")
(org-autoload "org-id"
'(org-id-get-create org-id-new org-id-copy org-id-get
org-id-get-with-outline-path-completion
org-id-get-with-outline-drilling
org-id-goto org-id-find))
org-id-goto org-id-find org-id-store-link))
;;; Variables for pre-computed regular expressions, all buffer local
@ -4504,7 +4552,7 @@ which the visibility is still unchanged. After RET is will also jump to
the location selected in the indirect buffer and expose the
the headline hierarchy above."
(interactive "P")
(let* ((org-refile-targets '((nil . (:maxlevel . 10))))
(let* ((org-refile-targets `((nil . (:maxlevel . ,org-goto-max-level))))
(org-refile-use-outline-path t)
(interface
(if (not alternative-interface)
@ -5268,6 +5316,7 @@ the inserted text when done."
(beginning-of-line 1)
(unless for-yank (org-back-over-empty-lines))
(setq beg (point))
(and (fboundp 'org-id-paste-tracker) (org-id-paste-tracker txt))
(insert-before-markers txt)
(unless (string-match "\n\\'" txt) (insert "\n"))
(setq newend (point))
@ -6141,7 +6190,6 @@ type. For a simple example of an export function, see `org-bbdb.el'."
(setcdr (assoc type org-link-protocols) (list follow export))
(push (list type follow export) org-link-protocols)))
;;;###autoload
(defun org-store-link (arg)
"\\<org-mode-map>Store an org-link to the current location.
@ -6202,14 +6250,34 @@ For file links, arg negates `org-context-in-file-links'."
link (org-make-link cpltxt)))
((and buffer-file-name (org-mode-p))
;; Just link to current headline
(setq cpltxt (concat "file:"
(abbreviate-file-name buffer-file-name)))
;; Add a context search string
(when (org-xor org-context-in-file-links arg)
;; Check if we are on a target
(if (org-in-regexp "<<\\(.*?\\)>>")
(setq cpltxt (concat cpltxt "::" (match-string 1)))
(cond
((org-in-regexp "<<\\(.*?\\)>>")
(setq cpltxt
(concat "file:"
(abbreviate-file-name buffer-file-name)
"::" (match-string 1))
link (org-make-link cpltxt)))
((and (featurep 'org-id)
(or (eq org-link-to-org-use-id t)
(and (eq org-link-to-org-use-id 'create-if-interactive)
(interactive-p))
(and org-link-to-org-use-id
(condition-case nil
(org-entry-get nil "ID")
(error nil)))))
;; We can make a link using the ID.
(setq link (condition-case nil
(org-id-store-link)
(error
;; probably before first headling, link to file only
(concat "file:"
(abbreviate-file-name buffer-file-name))))))
(t
;; Just link to current headline
(setq cpltxt (concat "file:"
(abbreviate-file-name buffer-file-name)))
;; Add a context search string
(when (org-xor org-context-in-file-links arg)
(setq txt (cond
((org-on-heading-p) nil)
((org-region-active-p)
@ -6221,10 +6289,10 @@ For file links, arg negates `org-context-in-file-links'."
(condition-case nil
(org-make-org-heading-search-string txt)
(error "")))
desc "NONE"))))
(if (string-match "::\\'" cpltxt)
(setq cpltxt (substring cpltxt 0 -2)))
(setq link (org-make-link cpltxt)))
desc "NONE")))
(if (string-match "::\\'" cpltxt)
(setq cpltxt (substring cpltxt 0 -2)))
(setq link (org-make-link cpltxt)))))
((buffer-file-name (buffer-base-buffer))
;; Just link to this file here.
@ -6655,7 +6723,7 @@ used as the link location instead of reading one interactively."
(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))
(org-add-props s nil 'org-attr attr))
s))
(defun org-attributes-to-string (plist)
@ -6663,7 +6731,8 @@ used as the link location instead of reading one interactively."
(let ((s "") key value)
(while plist
(setq key (pop plist) value (pop plist))
(setq s (concat s " "(symbol-name key) "=\"" value "\"")))
(and value
(setq s (concat s " " (symbol-name key) "=\"" value "\""))))
s))
;;; Opening/following a link
@ -7392,10 +7461,12 @@ on the system \"/user@host:\"."
(defun org-get-refile-targets (&optional default-buffer)
"Produce a table with refile targets."
(let ((entries (or org-refile-targets '((nil . (:level . 1)))))
targets txt re files f desc descre)
targets txt re files f desc descre fast-path-p level)
(message "Getting targets...")
(with-current-buffer (or default-buffer (current-buffer))
(while (setq entry (pop entries))
(setq files (car entry) desc (cdr entry))
(setq fast-path-p nil)
(cond
((null files) (setq files (list (current-buffer))))
((eq files 'org-agenda-files)
@ -7419,6 +7490,7 @@ on the system \"/user@host:\"."
(cdr desc)))
"\\}[ \t]")))
((eq (car desc) :maxlevel)
(setq fast-path-p t)
(setq descre (concat "^\\*\\{1," (number-to-string
(if org-odd-levels-only
(1- (* 2 (cdr desc)))
@ -7436,7 +7508,8 @@ on the system \"/user@host:\"."
(while (re-search-forward descre nil t)
(goto-char (point-at-bol))
(when (looking-at org-complex-heading-regexp)
(setq txt (org-link-display-format (match-string 4))
(setq level (org-reduced-level (- (match-end 1) (match-beginning 1)))
txt (org-link-display-format (match-string 4))
re (concat "^" (regexp-quote
(buffer-substring (match-beginning 1)
(match-end 4)))))
@ -7452,26 +7525,37 @@ on the system \"/user@host:\"."
(buffer-file-name (buffer-base-buffer))))
(if (eq org-refile-use-outline-path 'full-file-path)
(list (buffer-file-name (buffer-base-buffer)))))
(org-get-outline-path)
(org-get-outline-path fast-path-p level txt)
(list txt))
"/")))
(push (list txt f re (point)) targets))
(goto-char (point-at-eol))))))))
(nreverse targets))))
(message "Getting targets...done")
(nreverse targets))))
(defun org-protect-slash (s)
(while (string-match "/" s)
(setq s (replace-match "\\" t t s)))
s)
(defun org-get-outline-path ()
(defvar org-olpa (make-vector 20 nil))
(defun org-get-outline-path (&optional fastp level heading)
"Return the outline path to the current entry, as a list."
(let (rtn)
(save-excursion
(while (org-up-heading-safe)
(when (looking-at org-complex-heading-regexp)
(push (org-match-string-no-properties 4) rtn)))
rtn)))
(if (> level 19) (error "Outline path failure, more than 19 levels."))
(if fastp
(progn
(loop for i from level upto 19 do
(aset org-olpa i nil))
(prog1
(delq nil (append org-olpa nil))
(aset org-olpa level heading)))
(let (rtn)
(save-excursion
(while (org-up-heading-safe)
(when (looking-at org-complex-heading-regexp)
(push (org-match-string-no-properties 4) rtn)))
rtn))))
(defvar org-refile-history nil
"History for refiling operations.")
@ -7514,6 +7598,15 @@ operation has put the subtree."
(setq file (nth 1 it)
re (nth 2 it)
pos (nth 3 it))
(if (and (equal (buffer-file-name) file)
(if regionp
(and (>= pos region-start)
(<= pos region-end))
(and (>= pos (point))
(< pos (save-excursion
(org-end-of-subtree t t))))))
(error "Cannot refile to position inside the tree or region"))
(setq nbuf (or (find-buffer-visiting file)
(find-file-noselect file)))
(if goto
@ -7571,10 +7664,9 @@ operation has put the subtree."
'org-ido-completing-read))
(extra (if org-refile-use-outline-path "/" ""))
(filename (buffer-file-name (buffer-base-buffer cbuf)))
(fname (and filename (file-truename filename)))
(tbl (mapcar
(lambda (x)
(if (not (equal fname (file-truename (nth 1 x))))
(if (not (equal filename (nth 1 x)))
(cons (concat (car x) extra " ("
(file-name-nondirectory (nth 1 x)) ")")
(cdr x))
@ -7740,7 +7832,8 @@ This function can be used in a hook."
"BEGIN_EXAMPLE" "END_EXAMPLE"
"BEGIN_QUOTE" "END_QUOTE"
"BEGIN_VERSE" "END_VERSE"
"BEGIN_SRC" "END_SRC"))
"BEGIN_SRC" "END_SRC"
"CAPTION" "LABEL" "ATTR_HTML" "ATTR_LaTeX"))
(defcustom org-structure-template-alist
'(
@ -9437,10 +9530,9 @@ ignore inherited ones."
(defun org-toggle-tag (tag &optional onoff)
"Toggle the tag TAG for the current line.
If ONOFF is `on' or `off', don't toggle but set to this state."
(unless (org-on-heading-p t) (error "Not on headling"))
(let (res current)
(save-excursion
(beginning-of-line)
(org-back-to-heading t)
(if (re-search-forward (org-re "[ \t]:\\([[:alnum:]_@:]+\\):[ \t]*$")
(point-at-eol) t)
(progn
@ -10559,6 +10651,7 @@ completion."
IDENT can be a string, a symbol or a number, this function will search for
the string representation of it.
Return the position where this entry starts, or nil if there is no such entry."
(interactive "sID: ")
(let ((id (cond
((stringp ident) ident)
((symbol-name ident) (symbol-name ident))
@ -13412,6 +13505,12 @@ With optional NODE, go directly to that node."
;;; Generally useful functions
(defun org-find-text-property-in-string (prop s)
"Return the first non-nil value of property PROP in string S."
(or (get-text-property 0 prop s)
(get-text-property (or (next-single-property-change 0 prop s) 0)
prop s)))
(defun org-display-warning (message) ;; Copied from Emacs-Muse
"Display the given MESSAGE as a warning."
(if (fboundp 'display-warning)
@ -14308,6 +14407,11 @@ plainly yank the text as it is.
(error (error "Before first headline at position %d in buffer %s"
(point) (current-buffer)))))
(defun org-before-first-heading-p ()
"Before first heading?"
(save-excursion
(null (re-search-backward "^\\*+ " nil t))))
(defalias 'org-on-heading-p 'outline-on-heading-p)
(defalias 'org-at-heading-p 'outline-on-heading-p)
(defun org-at-heading-or-item-p ()
@ -14329,16 +14433,14 @@ With argument, move up ARG levels."
"Move to the heading line of which the present line is a subheading.
This version will not throw an error. It will return the level of the
headline found, or nil if no higher level is found."
(let ((pos (point)) start-level level
(re (concat "^" outline-regexp)))
(catch 'exit
(org-back-to-heading t)
(setq start-level (funcall outline-level))
(if (equal start-level 1) (throw 'exit nil))
(while (re-search-backward re nil t)
(setq level (funcall outline-level))
(if (< level start-level) (throw 'exit level)))
nil)))
(let (start-level re)
(org-back-to-heading t)
(setq start-level (funcall outline-level))
(if (equal start-level 1)
nil
(setq re (concat "^\\*\\{1," (number-to-string (1- start-level)) "\\} "))
(if (re-search-backward re nil t)
(funcall outline-level)))))
(defun org-first-sibling-p ()
"Is this heading the first child of its parents?"