Fix export of links to attachements

* lisp/org.el (org-entry-properties): Ignore narrowing when retrieving
  current headline properties.
This commit is contained in:
Nicolas Goaziou 2013-11-18 19:11:17 +01:00
parent 4e798549fe
commit c5aad89f5a
1 changed files with 95 additions and 96 deletions

View File

@ -15183,103 +15183,102 @@ is a string only get exactly this property. SPECIFIC can be a string, the
specific property we are interested in. Specifying it can speed specific property we are interested in. Specifying it can speed
things up because then unnecessary parsing is avoided." things up because then unnecessary parsing is avoided."
(setq which (or which 'all)) (setq which (or which 'all))
(org-with-point-at pom (org-with-wide-buffer
(let ((clockstr (substring org-clock-string 0 -1)) (org-with-point-at pom
(excluded '("TODO" "TAGS" "ALLTAGS" "PRIORITY" "BLOCKED")) (let ((clockstr (substring org-clock-string 0 -1))
(case-fold-search nil) (excluded '("TODO" "TAGS" "ALLTAGS" "PRIORITY" "BLOCKED"))
beg end range props sum-props key key1 value string clocksum clocksumt) (case-fold-search nil)
(save-excursion beg end range props sum-props key key1 value string clocksum clocksumt)
(when (condition-case nil (when (and (derived-mode-p 'org-mode)
(and (derived-mode-p 'org-mode) (org-back-to-heading t)) (ignore-errors (org-back-to-heading t)))
(error nil)) (setq beg (point))
(setq beg (point)) (setq sum-props (get-text-property (point) 'org-summaries))
(setq sum-props (get-text-property (point) 'org-summaries)) (setq clocksum (get-text-property (point) :org-clock-minutes)
(setq clocksum (get-text-property (point) :org-clock-minutes) clocksumt (get-text-property (point) :org-clock-minutes-today))
clocksumt (get-text-property (point) :org-clock-minutes-today)) (outline-next-heading)
(outline-next-heading) (setq end (point))
(setq end (point)) (when (memq which '(all special))
(when (memq which '(all special)) ;; Get the special properties, like TODO and tags
;; Get the special properties, like TODO and tags (goto-char beg)
(goto-char beg) (when (and (or (not specific) (string= specific "TODO"))
(when (and (or (not specific) (string= specific "TODO")) (looking-at org-todo-line-regexp) (match-end 2))
(looking-at org-todo-line-regexp) (match-end 2)) (push (cons "TODO" (org-match-string-no-properties 2)) props))
(push (cons "TODO" (org-match-string-no-properties 2)) props)) (when (and (or (not specific) (string= specific "PRIORITY"))
(when (and (or (not specific) (string= specific "PRIORITY")) (looking-at org-priority-regexp))
(looking-at org-priority-regexp)) (push (cons "PRIORITY" (org-match-string-no-properties 2)) props))
(push (cons "PRIORITY" (org-match-string-no-properties 2)) props)) (when (or (not specific) (string= specific "FILE"))
(when (or (not specific) (string= specific "FILE")) (push (cons "FILE" buffer-file-name) props))
(push (cons "FILE" buffer-file-name) props)) (when (and (or (not specific) (string= specific "TAGS"))
(when (and (or (not specific) (string= specific "TAGS")) (setq value (org-get-tags-string))
(setq value (org-get-tags-string)) (string-match "\\S-" value))
(string-match "\\S-" value)) (push (cons "TAGS" value) props))
(push (cons "TAGS" value) props)) (when (and (or (not specific) (string= specific "ALLTAGS"))
(when (and (or (not specific) (string= specific "ALLTAGS")) (setq value (org-get-tags-at)))
(setq value (org-get-tags-at))) (push (cons "ALLTAGS" (concat ":" (mapconcat 'identity value ":")
(push (cons "ALLTAGS" (concat ":" (mapconcat 'identity value ":") ":"))
":")) props))
props)) (when (or (not specific) (string= specific "BLOCKED"))
(when (or (not specific) (string= specific "BLOCKED")) (push (cons "BLOCKED" (if (org-entry-blocked-p) "t" "")) props))
(push (cons "BLOCKED" (if (org-entry-blocked-p) "t" "")) props)) (when (or (not specific)
(when (or (not specific) (member specific
(member specific '("SCHEDULED" "DEADLINE" "CLOCK" "CLOSED"
'("SCHEDULED" "DEADLINE" "CLOCK" "CLOSED" "TIMESTAMP" "TIMESTAMP_IA")))
"TIMESTAMP" "TIMESTAMP_IA"))) (catch 'match
(catch 'match (while (re-search-forward org-maybe-keyword-time-regexp end t)
(while (re-search-forward org-maybe-keyword-time-regexp end t) (setq key (if (match-end 1)
(setq key (if (match-end 1) (substring (org-match-string-no-properties 1)
(substring (org-match-string-no-properties 1) 0 -1))
0 -1)) string (if (equal key clockstr)
string (if (equal key clockstr) (org-trim
(org-trim (buffer-substring-no-properties
(buffer-substring-no-properties (match-beginning 3) (goto-char
(match-beginning 3) (goto-char (point-at-eol))))
(point-at-eol)))) (substring (org-match-string-no-properties 3)
(substring (org-match-string-no-properties 3) 1 -1)))
1 -1))) ;; Get the correct property name from the key. This is
;; Get the correct property name from the key. This is ;; necessary if the user has configured time keywords.
;; necessary if the user has configured time keywords. (setq key1 (concat key ":"))
(setq key1 (concat key ":")) (cond
(cond ((not key)
((not key) (setq key
(setq key (if (= (char-after (match-beginning 3)) ?\[)
(if (= (char-after (match-beginning 3)) ?\[) "TIMESTAMP_IA" "TIMESTAMP")))
"TIMESTAMP_IA" "TIMESTAMP"))) ((equal key1 org-scheduled-string) (setq key "SCHEDULED"))
((equal key1 org-scheduled-string) (setq key "SCHEDULED")) ((equal key1 org-deadline-string) (setq key "DEADLINE"))
((equal key1 org-deadline-string) (setq key "DEADLINE")) ((equal key1 org-closed-string) (setq key "CLOSED"))
((equal key1 org-closed-string) (setq key "CLOSED")) ((equal key1 org-clock-string) (setq key "CLOCK")))
((equal key1 org-clock-string) (setq key "CLOCK"))) (if (and specific (equal key specific) (not (equal key "CLOCK")))
(if (and specific (equal key specific) (not (equal key "CLOCK"))) (progn
(progn (push (cons key string) props)
(push (cons key string) props) ;; no need to search further if match is found
;; no need to search further if match is found (throw 'match t))
(throw 'match t)) (when (or (equal key "CLOCK") (not (assoc key props)))
(when (or (equal key "CLOCK") (not (assoc key props))) (push (cons key string) props)))))))
(push (cons key string) props)))))))
(when (memq which '(all standard)) (when (memq which '(all standard))
;; Get the standard properties, like :PROP: ... ;; Get the standard properties, like :PROP: ...
(setq range (org-get-property-block beg end)) (setq range (org-get-property-block beg end))
(when range (when range
(goto-char (car range)) (goto-char (car range))
(while (re-search-forward org-property-re (while (re-search-forward org-property-re
(cdr range) t) (cdr range) t)
(setq key (org-match-string-no-properties 2) (setq key (org-match-string-no-properties 2)
value (org-trim (or (org-match-string-no-properties 3) ""))) value (org-trim (or (org-match-string-no-properties 3) "")))
(unless (member key excluded) (unless (member key excluded)
(push (cons key (or value "")) props))))) (push (cons key (or value "")) props)))))
(if clocksum (if clocksum
(push (cons "CLOCKSUM" (push (cons "CLOCKSUM"
(org-columns-number-to-string (/ (float clocksum) 60.) (org-columns-number-to-string (/ (float clocksum) 60.)
'add_times)) 'add_times))
props)) props))
(if clocksumt (if clocksumt
(push (cons "CLOCKSUM_T" (push (cons "CLOCKSUM_T"
(org-columns-number-to-string (/ (float clocksumt) 60.) (org-columns-number-to-string (/ (float clocksumt) 60.)
'add_times)) 'add_times))
props)) props))
(unless (assoc "CATEGORY" props) (unless (assoc "CATEGORY" props)
(push (cons "CATEGORY" (org-get-category)) props)) (push (cons "CATEGORY" (org-get-category)) props))
(append sum-props (nreverse props))))))) (append sum-props (nreverse props)))))))
(defun org-entry-get (pom property &optional inherit literal-nil) (defun org-entry-get (pom property &optional inherit literal-nil)
"Get value of PROPERTY for entry or content at point-or-marker POM. "Get value of PROPERTY for entry or content at point-or-marker POM.