Bugfixes in occur mode
This commit is contained in:
parent
aa0bfcdcdb
commit
a91443e0cc
|
@ -3,7 +3,7 @@
|
|||
;; Copyright (C) 2011-2014 Free Software Foundation, Inc.
|
||||
|
||||
;; Author: Marc Ihm <org-index@2484.de>
|
||||
;; Version: 3.0.1
|
||||
;; Version: 3.0.2
|
||||
;; Keywords: outlines index
|
||||
|
||||
;; This file is not part of GNU Emacs.
|
||||
|
@ -66,6 +66,10 @@
|
|||
|
||||
;;; Change Log:
|
||||
|
||||
;; [2014-12-14 Su] Version 3.0.2:
|
||||
;; - Bugfixes in occur mode
|
||||
;; - New function `org-index-copy-references-from-heading-to-property'
|
||||
;;
|
||||
;; [2014-12-10 We] Version 3.0.1:
|
||||
;; - Bugfixes related with assistant
|
||||
;; - Fix for editing of category
|
||||
|
@ -185,7 +189,6 @@
|
|||
(defvar org-index--below-cursor nil "Word below cursor.")
|
||||
(defvar org-index--within-node nil "True, if we are within node of the index table.")
|
||||
(defvar org-index--active-window-index nil "Active window with index table (if any).")
|
||||
(defvar org-index--occur-follow-mode nil "True, if follow mode in occur-buffer is on.")
|
||||
(defvar org-index--message-text nil "Text that was issued as an explanation; helpful for regression tests.")
|
||||
|
||||
|
||||
|
@ -495,9 +498,9 @@ Optional argument COMMAND is a symbol naming the command to execute."
|
|||
(let (link)
|
||||
(if (and org-index--within-node
|
||||
(org-at-table-p))
|
||||
(setq link (org-index--get-field 'link))))
|
||||
(setq link (org-index--get-field 'link)))
|
||||
|
||||
(setq message-text (org-index--do-head search-ref search-link)))
|
||||
(setq message-text (org-index--do-head search-ref (or link search-link)))))
|
||||
|
||||
|
||||
((eq command 'leave)
|
||||
|
@ -786,9 +789,9 @@ from the result.
|
|||
|
||||
Example:
|
||||
|
||||
(plist-get (org-index-get-line 'ref \"12\") 'count)
|
||||
(plist-get (org-index-get-line 'ref \"R12\") 'count)
|
||||
|
||||
retrieves the value of the count-column for reference 12.
|
||||
retrieves the value of the count-column for reference number 12.
|
||||
|
||||
Argument TYPE is a symbol, either ref or link,
|
||||
argument VALUE specifies the value to search for."
|
||||
|
@ -1736,55 +1739,77 @@ specify flag TEMPORARY for th new table temporary, maybe COMPARE it with existin
|
|||
"Perform command head: Find node with REF or LINK and present it; if OTHER in separate window."
|
||||
|
||||
(if ref (setq org-index--last-ref ref))
|
||||
(let (message marker)
|
||||
|
||||
(let (message)
|
||||
;; Use link if available
|
||||
;; Prefer link if available
|
||||
(if link
|
||||
(setq marker (org-id-find link t))
|
||||
(setq marker
|
||||
(catch 'found
|
||||
(message (format "Scanning headlines for '%s' ..." ref))
|
||||
(org-map-entries
|
||||
(lambda ()
|
||||
(when (string= ref (org-entry-get (point) "org-index-ref"))
|
||||
(throw 'found (point-marker))))
|
||||
nil 'agenda)
|
||||
nil)))
|
||||
|
||||
(if marker
|
||||
(progn
|
||||
(org-index--update-line link)
|
||||
(org-id-goto link)
|
||||
(org-reveal)
|
||||
(setq message "Followed link"))
|
||||
|
||||
(message (format "Scanning headlines for '%s' ..." ref))
|
||||
(org-index--update-line ref)
|
||||
(let ((search (concat ".*" (org-index--make-guarded-search ref)))
|
||||
(org-trust-scanner-tags t)
|
||||
buffer point)
|
||||
(if (catch 'found
|
||||
(org-index--update-line (or link ref))
|
||||
(if link
|
||||
(setq message "Followed link")
|
||||
(setq message (format "Found '%s'" ref)))
|
||||
(if other
|
||||
(progn
|
||||
;; loop over all headlines, stop on first match
|
||||
(org-map-entries
|
||||
(lambda ()
|
||||
(when (or (looking-at search)
|
||||
(eq ref (org-entry-get (point) "org-index-ref")))
|
||||
;; If this is not an inlinetask ...
|
||||
(when (< (org-element-property :level (org-element-at-point))
|
||||
org-inlinetask-min-level)
|
||||
;; ... remember location and bail out
|
||||
(setq buffer (current-buffer))
|
||||
(setq point (point))
|
||||
(throw 'found t))))
|
||||
nil 'agenda)
|
||||
nil))
|
||||
|
||||
(progn
|
||||
(setq message (format "Found '%s'" (or ref link)))
|
||||
(if other
|
||||
(progn
|
||||
(pop-to-buffer buffer)
|
||||
(goto-char point)
|
||||
(org-reveal t)
|
||||
(recenter)
|
||||
(pop-to-buffer "*org-index-occur*"))
|
||||
(org-pop-to-buffer-same-window buffer)
|
||||
(goto-char point)
|
||||
(pop-to-buffer (marker-buffer marker))
|
||||
(goto-char marker)
|
||||
(org-reveal t)
|
||||
(recenter)))
|
||||
(setq message (format "Did not find '%s'" (or ref link))))))
|
||||
(org-show-entry)
|
||||
(recenter)
|
||||
(pop-to-buffer "*org-index-occur*"))
|
||||
(org-pop-to-buffer-same-window (marker-buffer marker))
|
||||
(goto-char marker)
|
||||
(org-reveal t)
|
||||
(recenter)))
|
||||
(if link
|
||||
(setq message (format "Did not find link '%s'" link))
|
||||
(setq message (format "Did not find '%s'. Note: References in headings are no longer found in recent versions of this package; simply call `org-index-copy-references-from-heading-to-property' once to fix this." ref))))
|
||||
|
||||
message))
|
||||
|
||||
|
||||
(defun org-index-copy-references-from-heading-to-property ()
|
||||
"Loop over all headings and copy; needs to be done only once"
|
||||
(interactive)
|
||||
|
||||
(org-index--verify-id)
|
||||
(org-index--parse-table)
|
||||
|
||||
(if (y-or-n-p "This function will scan all headings and copy any reference to the property. Do you want to proceed? ")
|
||||
(let (results)
|
||||
(message "Scanning headlines ...")
|
||||
(setq results (org-map-entries
|
||||
(lambda ()
|
||||
(let (ref-from-head ref-from-property)
|
||||
(when (looking-at (concat ".*\\("
|
||||
(org-index--make-guarded-search org-index--ref-regex 'dont-quote)
|
||||
"\\)"))
|
||||
|
||||
(setq ref-from-head (match-string 1))
|
||||
(setq ref-from-property (org-entry-get (point) "org-index-ref"))
|
||||
|
||||
(when (and (not (string= ref-from-head ref-from-property)) ; ref from head is not in property
|
||||
(< (org-element-property :level (org-element-at-point)) ; node is not an inline task
|
||||
org-inlinetask-min-level)
|
||||
(org-index--get-or-delete-line 'get 'ref ref-from-head)) ; ref appears in index table
|
||||
(org-entry-put (point) "org-index-ref" ref-from-head)
|
||||
1))))
|
||||
nil 'agenda))
|
||||
(message "Scanned %d entries, %d of them needed to be and were fixed." (length results) (count 1 results)))
|
||||
(message "Please note, that some headings may not be found. Call this function once to fix this.")))
|
||||
|
||||
|
||||
(defun org-index--do-occur ()
|
||||
"Perform command occur."
|
||||
(let ((occur-buffer-name "*org-index-occur*")
|
||||
|
@ -1806,8 +1831,6 @@ specify flag TEMPORARY for th new table temporary, maybe COMPARE it with existin
|
|||
in-c-backspace ; true while processing C-backspace
|
||||
show-headings ; true, if headings should be shown
|
||||
fun-on-ret ; function to be executed, if return is pressed
|
||||
fun-on-s-ret ; shift
|
||||
fun-on-m-ret ; shift
|
||||
fun-on-tab ; function to be executed, if tab is pressed
|
||||
ret from to key)
|
||||
|
||||
|
@ -1821,19 +1844,12 @@ specify flag TEMPORARY for th new table temporary, maybe COMPARE it with existin
|
|||
(let ((keymap (make-sparse-keymap)))
|
||||
|
||||
(set-keymap-parent keymap org-mode-map)
|
||||
(setq fun-on-ret (lambda () (interactive) (org-index--occur-find-heading nil)))
|
||||
(setq fun-on-ret (lambda () (interactive) (org-index--occur-find-heading)))
|
||||
(define-key keymap [return] fun-on-ret)
|
||||
(setq fun-on-tab (lambda () (interactive)
|
||||
(org-index--occur-find-heading t)
|
||||
(setq org-index--occur-follow-mode (not org-index--occur-follow-mode))))
|
||||
(org-index--occur-find-heading t)))
|
||||
(define-key keymap [tab] fun-on-tab)
|
||||
(define-key keymap [(control ?i)] fun-on-tab)
|
||||
(define-key keymap [up] (lambda () (interactive)
|
||||
(forward-line -1)
|
||||
(if org-index--occur-follow-mode (org-index--occur-find-heading t))))
|
||||
(define-key keymap [down] (lambda () (interactive)
|
||||
(forward-line 1)
|
||||
(if org-index--occur-follow-mode (org-index--occur-find-heading t))))
|
||||
(use-local-map keymap)))
|
||||
|
||||
(with-current-buffer org-index--buffer
|
||||
|
@ -2073,13 +2089,12 @@ specify flag TEMPORARY for th new table temporary, maybe COMPARE it with existin
|
|||
(forward-line 1)))))
|
||||
|
||||
|
||||
(defun org-index--occur-find-heading (x)
|
||||
"Helper for keymap of occur: find heading, if X in other window."
|
||||
(interactive)
|
||||
(defun org-index--occur-find-heading (&optional other)
|
||||
"Helper for keymap of occur: find heading, if other in other window and expand."
|
||||
(save-excursion
|
||||
(let ((ref (org-index--get-field 'ref))
|
||||
(link (org-index--get-field 'link)))
|
||||
(message (org-index--do-head ref link x)))))
|
||||
(message (org-index--do-head ref link other)))))
|
||||
|
||||
|
||||
(defun org-index--create-new-line (create-ref)
|
||||
|
|
Loading…
Reference in New Issue