|
@@ -3,7 +3,7 @@
|
|
|
;; Copyright (C) 2011-2017 Free Software Foundation, Inc.
|
|
|
|
|
|
;; Author: Marc Ihm <org-index@2484.de>
|
|
|
-;; Version: 5.2.1
|
|
|
+;; Version: 5.2.3
|
|
|
;; Keywords: outlines index
|
|
|
|
|
|
;; This file is not part of GNU Emacs.
|
|
@@ -49,22 +49,20 @@
|
|
|
;;
|
|
|
;; Setup:
|
|
|
;;
|
|
|
-;; - Place this file in a directory from your load-path,
|
|
|
+;; - Place this file in a directory of your load-path,
|
|
|
;; e.g. org-mode/contrib/lisp.
|
|
|
;;
|
|
|
;; - Add these lines to your .emacs:
|
|
|
;;
|
|
|
;; (require 'org-index)
|
|
|
-;; (global-set-key (kbd "C-c i") 'org-index-dispatch) ; this is optional but recommended
|
|
|
-;; (org-index-prepare-when-idle) ; this is optional, not needed initially; see its description
|
|
|
;;
|
|
|
-;; - Restart your Emacs to make these lines effective.
|
|
|
+;; - Restart your Emacs to make this effective.
|
|
|
;;
|
|
|
;; - Invoke `org-index'; on first run it will assist in creating your
|
|
|
;; index table.
|
|
|
;;
|
|
|
-;; - Optionally invoke `M-x org-customize' to tune some settings (choose
|
|
|
-;; group org-index).
|
|
|
+;; - Optionally invoke `M-x org-customize', group 'Org Index', to tune
|
|
|
+;; some settings, e.g. the global prefix key 'C-c i'.
|
|
|
;;
|
|
|
;;
|
|
|
;; Further information:
|
|
@@ -87,11 +85,13 @@
|
|
|
|
|
|
;;; Change Log:
|
|
|
|
|
|
-;; [2017-01-29 Su] Version 5.2.1
|
|
|
+;; [2017-02-18 Sa] Version 5.2.3
|
|
|
;; - New command 'focus'
|
|
|
-;; - Improved on speed by using the stored property "max-ref"
|
|
|
+;; - Speeded up org-index--parse-table with the stored property "max-ref"
|
|
|
+;; - Speeded up org-index--on with search
|
|
|
;; - Added org-index-prepare-when-idle
|
|
|
;; - Fixed compatibility issue with emacs 24 (font-lock-ensure)
|
|
|
+;; - Added more customizations
|
|
|
;; - Bugfixes
|
|
|
;;
|
|
|
;; [2016-10-19 We] Version 5.1.4
|
|
@@ -179,7 +179,7 @@
|
|
|
(require 'widget)
|
|
|
|
|
|
;; Version of this package
|
|
|
-(defvar org-index-version "5.2.0" "Version of `org-index', format is major.minor.bugfix, where \"major\" are incompatible changes and \"minor\" are new features.")
|
|
|
+(defvar org-index-version "5.2.3" "Version of `org-index', format is major.minor.bugfix, where \"major\" are incompatible changes and \"minor\" are new features.")
|
|
|
|
|
|
;; customizable options
|
|
|
(defgroup org-index nil
|
|
@@ -214,6 +214,33 @@ mixed First, show all index entries, which have been
|
|
|
(const count)
|
|
|
(const mixed)))
|
|
|
|
|
|
+(defcustom org-index-dispatch-key "i"
|
|
|
+ "Key to invoke ‘org-index-dispatch’, which is the central entry function for ‘org-index’."
|
|
|
+ :group 'org-index
|
|
|
+ :initialize 'custom-initialize-set
|
|
|
+ :set (lambda (var val)
|
|
|
+ (set-default var val)
|
|
|
+ (global-set-key org-index-dispatch-key 'org-index-dispatch))
|
|
|
+ :type 'key-sequence)
|
|
|
+
|
|
|
+(defcustom org-index-idle-delay 68
|
|
|
+ "Delay in seconds after which buffer will sorted or fontified when emacs is idle."
|
|
|
+ :group 'org-index
|
|
|
+ :type 'integer)
|
|
|
+
|
|
|
+(defcustom org-index-prepare-when-idle nil
|
|
|
+ "Optionally fontify and sort index-table when idle, so that first interactive call is faster.
|
|
|
+You only need this if your index has grown so large, that first invocation of org-index needs
|
|
|
+a noticable amount of time."
|
|
|
+ :group 'org-index
|
|
|
+ :initialize 'custom-initialize-set
|
|
|
+ :set (lambda (var val)
|
|
|
+ (set-default var val)
|
|
|
+ (when val
|
|
|
+ (setq org-index--align-interactive 200)
|
|
|
+ (run-with-idle-timer org-index-idle-delay nil 'org-index--idle-prepare)))
|
|
|
+ :type 'boolean)
|
|
|
+
|
|
|
(defcustom org-index-yank-after-add 'ref
|
|
|
"Specifies which column should be yanked after adding a new index row.
|
|
|
Valid values are some columns of index table."
|
|
@@ -223,14 +250,6 @@ Valid values are some columns of index table."
|
|
|
(const category)
|
|
|
(const keywords)))
|
|
|
|
|
|
-(defcustom org-index-point-on-add 'keywords
|
|
|
- "Specifies in which column point will land when adding a new index row.
|
|
|
-Valid values are some columns of index table."
|
|
|
- :group 'org-index
|
|
|
- :type '(choice
|
|
|
- (const category)
|
|
|
- (const keywords)))
|
|
|
-
|
|
|
(defcustom org-index-copy-heading-to-keywords t
|
|
|
"When adding a new node to index: Copy heading to keywords-column ?"
|
|
|
:group 'org-index
|
|
@@ -284,7 +303,7 @@ those pieces."
|
|
|
(defvar org-index--saved-positions nil "Saved positions within current buffer and index buffer; filled by ‘org-index--save-positions’.")
|
|
|
(defvar org-index--headings nil "Headlines of index-table as a string.")
|
|
|
(defvar org-index--headings-visible nil "Visible part of headlines of index-table as a string.")
|
|
|
-(defvar org-index--id-focused-node nil "Id of focused node (if any)")
|
|
|
+(defvar org-index--id-focused-node nil "Id of focused node (if any).")
|
|
|
|
|
|
;; Variables to hold context and state
|
|
|
(defvar org-index--last-fingerprint nil "Fingerprint of last line created.")
|
|
@@ -301,7 +320,8 @@ those pieces."
|
|
|
(defvar org-index--occur-lines-collected 0 "Number of lines collected in occur buffer; helpful for tests.")
|
|
|
(defvar org-index--last-sort-assumed nil "Last column, the index has been sorted after (best guess).")
|
|
|
(defvar org-index--sort-timer nil "Timer to sort index in correct order.")
|
|
|
-(defvar org-index--aligned nil "Remember for this Emacs session, if table has been aligned at least once.")
|
|
|
+(defvar org-index--aligned 0 "For this Emacs session: remember number of table lines aligned.")
|
|
|
+(defvar org-index--align-interactive most-positive-fixnum "Number of rows to align in ‘org-index--parse-table’.")
|
|
|
(defvar org-index--edit-widgets nil "List of widgets used to edit.")
|
|
|
(defvar org-index--context-index nil "Position and line used for index in edit buffer.")
|
|
|
(defvar org-index--context-occur nil "Position and line used for occur in edit buffer.")
|
|
@@ -316,7 +336,6 @@ those pieces."
|
|
|
(defconst org-index--valid-headings '(ref id created last-accessed count keywords category level yank tags) "All valid headings.")
|
|
|
(defconst org-index--occur-buffer-name "*org-index-occur*" "Name of occur buffer.")
|
|
|
(defconst org-index--edit-buffer-name "*org-index-edit*" "Name of edit buffer.")
|
|
|
-(defconst org-index--idle-delay 68 "Delay in seconds after which buffer will sorted or fontified.")
|
|
|
(defvar org-index--short-help-text nil "Cache for result of `org-index--get-short-help-text.")
|
|
|
(defvar org-index--shortcut-chars nil "Cache for result of `org-index--get-shortcut-chars.")
|
|
|
|
|
@@ -365,7 +384,7 @@ for its index table.
|
|
|
To start building up your index, use subcommands 'add', 'ref' and
|
|
|
'yank' to create entries and use 'occur' to find them.
|
|
|
|
|
|
-This is version 5.2.0 of org-index.el.
|
|
|
+This is version 5.2.3 of org-index.el.
|
|
|
|
|
|
|
|
|
The function `org-index' is the only interactive function of this
|
|
@@ -476,7 +495,7 @@ interactive calls."
|
|
|
(org-index--verify-id)
|
|
|
|
|
|
;; Get configuration of index table
|
|
|
- (org-index--parse-table)
|
|
|
+ (org-index--parse-table org-index--align-interactive t)
|
|
|
|
|
|
;; store context information
|
|
|
(org-index--retrieve-context)
|
|
@@ -491,7 +510,7 @@ interactive calls."
|
|
|
;; rearrange for index beeing sorted into default sort order after 300 secs of idle time
|
|
|
(unless org-index--sort-timer
|
|
|
(setq org-index--sort-timer
|
|
|
- (run-with-idle-timer org-index--idle-delay t 'org-index--sort-silent)))
|
|
|
+ (run-with-idle-timer org-index-idle-delay t 'org-index--sort-silent)))
|
|
|
|
|
|
|
|
|
;;
|
|
@@ -815,7 +834,7 @@ interactive calls."
|
|
|
""))
|
|
|
(symbol-name sort)
|
|
|
org-index-sort-by
|
|
|
- org-index--idle-delay
|
|
|
+ org-index-idle-delay
|
|
|
(second groups-and-counts)
|
|
|
(symbol-name sort)
|
|
|
(third groups-and-counts))))
|
|
@@ -859,8 +878,7 @@ interactive calls."
|
|
|
|
|
|
((eq command 'set-focus)
|
|
|
(let ((focus-id (org-id-get-create)))
|
|
|
- (save-excursion
|
|
|
- (set-buffer org-index--buffer)
|
|
|
+ (with-current-buffer org-index--buffer
|
|
|
(org-entry-put org-index--point "id-focused-node" focus-id)
|
|
|
(setq org-index--id-focused-node focus-id)
|
|
|
(setq message-text "Focus has been set on current node"))))
|
|
@@ -933,7 +951,7 @@ Optional argument KEYS-VALUES specifies content of new line."
|
|
|
|
|
|
(let ((ref (plist-get keys-values 'ref)))
|
|
|
(org-index--verify-id)
|
|
|
- (org-index--parse-table t)
|
|
|
+ (org-index--parse-table)
|
|
|
(if (not (memq ref '(t nil)))
|
|
|
(error "Column 'ref' accepts only 't' or 'nil'"))
|
|
|
(when ref
|
|
@@ -1000,12 +1018,12 @@ Optional argument WITH-SHORT-HELP displays help screen upfront."
|
|
|
(setq height-after (window-height win))
|
|
|
(goto-char (point-min))
|
|
|
(end-of-line)
|
|
|
- (insert
|
|
|
+ (insert
|
|
|
(if (> height-before height-after)
|
|
|
"."
|
|
|
(concat ", "
|
|
|
(substitute-command-keys "\\[scroll-other-window]")
|
|
|
- " to scroll:")))
|
|
|
+ " to scroll:")))
|
|
|
(goto-char (point-min)))))
|
|
|
|
|
|
|
|
@@ -1124,7 +1142,7 @@ Optional argument WITH-SHORT-HELP displays help screen upfront."
|
|
|
|
|
|
|
|
|
(defun org-index--edit-c-c-c-c ()
|
|
|
- "Function to invoked on C-c C-c in Edit buffer."
|
|
|
+ "Function to invoke on C-c C-c in Edit buffer."
|
|
|
(interactive)
|
|
|
|
|
|
(let ((obuf (get-buffer org-index--occur-buffer-name))
|
|
@@ -1267,7 +1285,7 @@ argument VALUE specifies the value to search for."
|
|
|
(error "Need a value to search for"))
|
|
|
|
|
|
(org-index--verify-id)
|
|
|
- (org-index--parse-table t)
|
|
|
+ (org-index--parse-table)
|
|
|
|
|
|
(org-index--get-line column value))
|
|
|
|
|
@@ -1371,8 +1389,10 @@ Argument COLUMN and VALUE specify line to get."
|
|
|
(setq org-index--within-occur (string= (buffer-name) org-index--occur-buffer-name)))
|
|
|
|
|
|
|
|
|
-(defun org-index--parse-table (&optional no-reformat)
|
|
|
- "Parse content of index table."
|
|
|
+(defun org-index--parse-table (&optional num-lines-to-format check-sort-mixed)
|
|
|
+ "Parse content of index table.
|
|
|
+Optional argument NUM-LINES-TO-FORMAT limits formatting effort and duration.
|
|
|
+Optional argument CHECK-SORT-MIXED triggers resorting if mixed and stale."
|
|
|
|
|
|
(let (ref-field
|
|
|
ref-num
|
|
@@ -1380,33 +1400,56 @@ Argument COLUMN and VALUE specify line to get."
|
|
|
end-of-headings
|
|
|
start-of-headings)
|
|
|
|
|
|
+ (unless num-lines-to-format (setq num-lines-to-format 0))
|
|
|
+
|
|
|
(with-current-buffer org-index--buffer
|
|
|
|
|
|
(setq initial-point (point))
|
|
|
|
|
|
(org-index--go-below-hline)
|
|
|
- (unless no-reformat (org-reveal))
|
|
|
+ (org-reveal)
|
|
|
+
|
|
|
+ ;; if table is sorted mixed and it was sorted correctly yesterday, it could still be wrong today; so check
|
|
|
+ (when (and check-sort-mixed (eq org-index-sort-by 'mixed))
|
|
|
+ (goto-char org-index--below-hline)
|
|
|
+ (let (count-first-line count-second-line)
|
|
|
+ (setq count-first-line (string-to-number (concat (org-index--get-or-set-field 'count) " 0")))
|
|
|
+ (forward-line)
|
|
|
+ (setq count-second-line (string-to-number (concat (org-index--get-or-set-field 'count) " 0")))
|
|
|
+ (forward-line -1)
|
|
|
+ (if (and (string< (org-index--get-or-set-field 'last-accessed)
|
|
|
+ (org-index--get-mixed-time))
|
|
|
+ (< count-first-line count-second-line))
|
|
|
+ (org-index--do-sort-index org-index-sort-by)))
|
|
|
+ (org-index--go-below-hline))
|
|
|
|
|
|
;; align and fontify table once for this emacs session
|
|
|
- (unless (or org-index--aligned no-reformat)
|
|
|
- (message "Aligning and fontifying index table (once per emacs session)...")
|
|
|
- (org-table-align) ; needs to happen before fontification to be effective ?
|
|
|
- (let ((is-modified (buffer-modified-p))
|
|
|
- (below (point)))
|
|
|
- (while (org-at-table-p)
|
|
|
- (forward-line))
|
|
|
- (font-lock-fontify-region below (point))
|
|
|
- (org-index--go-below-hline)
|
|
|
- (setq org-index--aligned t)
|
|
|
- (set-buffer-modified-p is-modified)))
|
|
|
+ (when (> num-lines-to-format org-index--aligned)
|
|
|
+ (org-index--go-below-hline)
|
|
|
+ (message "Aligning and fontifying %s lines of index table (once per emacs session)..."
|
|
|
+ (if (= num-lines-to-format most-positive-fixnum) "all" (format "%d" num-lines-to-format)))
|
|
|
+ (save-restriction
|
|
|
+ (let (from to)
|
|
|
+ (forward-line -3)
|
|
|
+ (setq from (point))
|
|
|
+ (setq to (org-table-end))
|
|
|
+ (when (< num-lines-to-format most-positive-fixnum)
|
|
|
+ (forward-line (+ 3 num-lines-to-format))
|
|
|
+ (narrow-to-region from (point))
|
|
|
+ (setq to (min (point) to)))
|
|
|
+ (goto-char org-index--below-hline)
|
|
|
+ (org-table-align)
|
|
|
+ (setq to (min (point-max) to))
|
|
|
+ (font-lock-fontify-region from to)))
|
|
|
+ (setq org-index--aligned num-lines-to-format)
|
|
|
+ (org-index--go-below-hline)
|
|
|
+ (message "Done."))
|
|
|
|
|
|
- (org-index--go-below-hline)
|
|
|
(beginning-of-line)
|
|
|
|
|
|
;; get headings to display during occur
|
|
|
(setq end-of-headings (point))
|
|
|
- (while (org-at-table-p) (forward-line -1))
|
|
|
- (forward-line)
|
|
|
+ (goto-char (org-table-begin))
|
|
|
(setq start-of-headings (point))
|
|
|
(setq org-index--headings-visible (substring-no-properties (org-index--copy-visible start-of-headings end-of-headings)))
|
|
|
(setq org-index--headings (buffer-substring start-of-headings end-of-headings))
|
|
@@ -1416,9 +1459,7 @@ Argument COLUMN and VALUE specify line to get."
|
|
|
(setq org-index--numcols (- (org-table-current-column) 1))
|
|
|
|
|
|
;; go to top of table
|
|
|
- (while (org-at-table-p)
|
|
|
- (forward-line -1))
|
|
|
- (forward-line)
|
|
|
+ (goto-char (org-table-begin))
|
|
|
|
|
|
;; parse line of headings
|
|
|
(org-index--parse-headings)
|
|
@@ -1434,20 +1475,6 @@ Argument COLUMN and VALUE specify line to get."
|
|
|
;; Get id of focused node (if any)
|
|
|
(setq org-index--id-focused-node (org-entry-get nil "id-focused-node"))
|
|
|
|
|
|
- ;; check, if the table still seems to be sorted mixed
|
|
|
- (unless no-reformat
|
|
|
- (goto-char org-index--below-hline)
|
|
|
- (when (eq org-index-sort-by 'mixed)
|
|
|
- (let (count-first-line count-second-line)
|
|
|
- (setq count-first-line (string-to-number (concat (org-index--get-or-set-field 'count) " 0")))
|
|
|
- (forward-line)
|
|
|
- (setq count-second-line (string-to-number (concat (org-index--get-or-set-field 'count) " 0")))
|
|
|
- (forward-line -1)
|
|
|
- (if (and (string< (org-index--get-or-set-field 'last-accessed)
|
|
|
- (org-index--get-mixed-time))
|
|
|
- (< count-first-line count-second-line))
|
|
|
- (org-index--do-sort-index org-index-sort-by)))))
|
|
|
-
|
|
|
;; save position below hline
|
|
|
(org-index--go-below-hline)
|
|
|
;; go back to initial position
|
|
@@ -1455,10 +1482,11 @@ Argument COLUMN and VALUE specify line to get."
|
|
|
|
|
|
|
|
|
(defun org-index--get-decoration-from-ref-field (ref-field)
|
|
|
+ "Extract decoration from a REF-FIELD."
|
|
|
(unless (string-match "^\\([^0-9]*\\)\\([0-9]+\\)\\([^0-9]*\\)$" ref-field)
|
|
|
(org-index--report-index-error
|
|
|
"Reference in index table ('%s') does not contain a number" ref-field))
|
|
|
-
|
|
|
+
|
|
|
;; These are the decorations used within the first ref of index
|
|
|
(setq org-index--head (match-string 1 ref-field))
|
|
|
(setq org-index--tail (match-string 3 ref-field))
|
|
@@ -1469,6 +1497,7 @@ Argument COLUMN and VALUE specify line to get."
|
|
|
|
|
|
|
|
|
(defun org-index--extract-refnum (ref-field)
|
|
|
+ "Extract the number from a complete reference REF-FIELD like 'R102'."
|
|
|
(unless (string-match org-index--ref-regex ref-field)
|
|
|
(org-index--report-index-error
|
|
|
"Reference '%s' is not formatted properly (does not match '%s')" ref-field org-index--ref-regex))
|
|
@@ -1476,9 +1505,9 @@ Argument COLUMN and VALUE specify line to get."
|
|
|
|
|
|
|
|
|
(defun org-index--migrate-maxref-to-property ()
|
|
|
- "One-time migration: No property; need to go through whole table once to find max"
|
|
|
+ "One-time migration: No property; need to go through whole table once to find max."
|
|
|
(org-index--go-below-hline)
|
|
|
- (let (ref-field ref)
|
|
|
+ (let (ref-field ref-num ref)
|
|
|
(message "One-time migration to set index-property maxref...")
|
|
|
(unless org-index--maxrefnum (setq org-index--maxrefnum 0))
|
|
|
(while (org-at-table-p)
|
|
@@ -1489,20 +1518,20 @@ Argument COLUMN and VALUE specify line to get."
|
|
|
(if (> ref-num org-index--maxrefnum) (setq org-index--maxrefnum ref-num)))
|
|
|
(forward-line))
|
|
|
(unless org-index--maxrefnum
|
|
|
- (org-index--report-index-error "No reference found in property max-ref and none in index."))
|
|
|
+ (org-index--report-index-error "No reference found in property max-ref and none in index"))
|
|
|
(setq ref (org-index--get-save-maxref t))
|
|
|
(org-index--go-below-hline)
|
|
|
(message "Done.")
|
|
|
- ref))
|
|
|
+ ref))
|
|
|
|
|
|
|
|
|
(defun org-index--get-save-maxref (&optional no-inc)
|
|
|
- "Get next reference, increment number and store it in index"
|
|
|
+ "Get next reference, increment number and store it in index.
|
|
|
+Optional argument NO-INC skips automatic increment on maxref."
|
|
|
(let (ref)
|
|
|
(unless no-inc (setq org-index--maxrefnum (1+ org-index--maxrefnum)))
|
|
|
(setq ref (format org-index--ref-format org-index--maxrefnum))
|
|
|
- (save-excursion
|
|
|
- (set-buffer org-index--buffer)
|
|
|
+ (with-current-buffer org-index--buffer
|
|
|
(org-entry-put org-index--point "max-ref" ref))
|
|
|
ref))
|
|
|
|
|
@@ -1580,7 +1609,7 @@ Argument COLUMN and VALUE specify line to get."
|
|
|
(org-index--go-below-hline)
|
|
|
(forward-line 0)
|
|
|
(setq top (point))
|
|
|
- (while (org-at-table-p) (forward-line))
|
|
|
+ (goto-char (org-table-end))
|
|
|
|
|
|
;; kill all empty rows at bottom
|
|
|
(while (progn
|
|
@@ -1610,8 +1639,7 @@ Argument COLUMN and VALUE specify line to get."
|
|
|
;; restore modification state
|
|
|
(set-buffer-modified-p is-modified)))
|
|
|
|
|
|
- (setq org-index--last-sort-assumed sort)
|
|
|
- (setq org-index--last-sort-actual sort))))
|
|
|
+ (setq org-index--last-sort-assumed sort))))
|
|
|
|
|
|
|
|
|
(defun org-index--do-sort-lines (what)
|
|
@@ -2521,7 +2549,7 @@ Optional argument DEFAULTS gives default values."
|
|
|
(org-set-tags-to new-tags)))
|
|
|
|
|
|
|
|
|
-(defun org-index--go (&optional column value)
|
|
|
+(defun org-index--go (column value)
|
|
|
"Position cursor on index line where COLUMN equals VALUE.
|
|
|
Return t or nil, leave point on line or at top of table, needs to be in buffer initially."
|
|
|
(let (found)
|
|
@@ -2529,17 +2557,23 @@ Return t or nil, leave point on line or at top of table, needs to be in buffer i
|
|
|
(unless (eq (current-buffer) org-index--buffer)
|
|
|
(error "This is a bug: Not in index buffer"))
|
|
|
|
|
|
- ;; loop over lines
|
|
|
- (goto-char org-index--below-hline)
|
|
|
- (if column
|
|
|
- (progn
|
|
|
- (forward-line -1)
|
|
|
- (while (and (not found)
|
|
|
- (forward-line)
|
|
|
- (org-at-table-p))
|
|
|
- (setq found (string= value (org-index--get-or-set-field column)))))
|
|
|
- (setq found t))
|
|
|
+ (unless value
|
|
|
+ (error "Cannot search for nil"))
|
|
|
+
|
|
|
+ (if (string= value "")
|
|
|
+ (error "Cannot search for empty string"))
|
|
|
+
|
|
|
+ (if (<= (length value) 2)
|
|
|
+ (warn "Searching for short string '%s' will be slow" value))
|
|
|
|
|
|
+ (goto-char org-index--below-hline)
|
|
|
+ (forward-line 0)
|
|
|
+ (save-restriction
|
|
|
+ (narrow-to-region (point) (org-table-end))
|
|
|
+ (while (and (not found)
|
|
|
+ (search-forward value nil t))
|
|
|
+ (setq found (string= value (org-index--get-or-set-field column)))))
|
|
|
+
|
|
|
;; return value
|
|
|
(if found
|
|
|
t
|
|
@@ -2584,7 +2618,6 @@ If OTHER in separate window."
|
|
|
words ; list words that should match
|
|
|
occur-buffer
|
|
|
begin ; position of first line
|
|
|
- narrow ; start of narrowed buffer
|
|
|
help-text ; cons with help text short and long
|
|
|
search-text ; description of text to search for
|
|
|
done ; true, if loop is done
|
|
@@ -2619,11 +2652,7 @@ If OTHER in separate window."
|
|
|
(forward-line 0)
|
|
|
(setq begin (point))
|
|
|
(forward-line -1)
|
|
|
- (setq narrow (point))
|
|
|
- (while (org-at-table-p)
|
|
|
- (forward-line))
|
|
|
- (narrow-to-region narrow (point))
|
|
|
- (goto-char (point-min))
|
|
|
+ (narrow-to-region (point) (org-table-end))
|
|
|
(forward-line)
|
|
|
|
|
|
;; initialize help text
|
|
@@ -2650,7 +2679,6 @@ If OTHER in separate window."
|
|
|
(if in-c-backspace
|
|
|
(setq key "<backspace>")
|
|
|
(setq search-text (mapconcat 'identity (reverse (cons word words)) ","))
|
|
|
- (message "foo")
|
|
|
|
|
|
;; read key, if selected frame has not changed
|
|
|
(if (eq initial-frame (selected-frame))
|
|
@@ -2752,7 +2780,7 @@ If OTHER in separate window."
|
|
|
(line-move -1 t)
|
|
|
(line-move 1 t))
|
|
|
|
|
|
- ;; anything else terminates loop
|
|
|
+ ;; anything else terminates input loop
|
|
|
(t (setq done t))))
|
|
|
|
|
|
;; put back input event, that caused the loop to end
|
|
@@ -2944,7 +2972,11 @@ If OTHER in separate window."
|
|
|
(setq yank (replace-regexp-in-string (regexp-quote "\\vert") "|" yank nil 'literal))
|
|
|
(kill-new yank)
|
|
|
(org-mark-ring-goto)
|
|
|
- (format "Copied '%s' (no node is associated)" yank))
|
|
|
+ (if (s-starts-with-p "http" yank)
|
|
|
+ (progn
|
|
|
+ (browse-url yank)
|
|
|
+ (format "Opened '%s' in browser (and copied it too)" yank))
|
|
|
+ (format "Copied '%s' (no node is associated)" yank)))
|
|
|
(error "Internal error, this line contains neither id, nor reference, nor text to yank")))))
|
|
|
(message "Not at table")))
|
|
|
|
|
@@ -3031,8 +3063,7 @@ If OTHER in separate window."
|
|
|
(goto-char org-index--below-hline)
|
|
|
(if (eq org-index-sort-by 'count)
|
|
|
(progn
|
|
|
- (while (org-at-table-p)
|
|
|
- (forward-line))
|
|
|
+ (goto-char (org-table-end))
|
|
|
(forward-line -1)
|
|
|
(org-table-insert-row t))
|
|
|
(org-table-insert-row))
|
|
@@ -3048,24 +3079,18 @@ If OTHER in separate window."
|
|
|
"Sort index for default column to remove any effects of temporary sorting."
|
|
|
(save-excursion
|
|
|
(org-index--verify-id)
|
|
|
- (org-index--parse-table t)
|
|
|
- (org-index--on nil nil
|
|
|
- (org-index--do-sort-index org-index-sort-by)
|
|
|
- (org-table-align)
|
|
|
- (remove-hook 'before-save-hook 'org-index--sort-silent))))
|
|
|
+ (org-index--parse-table)
|
|
|
+ (with-current-buffer org-index--buffer
|
|
|
+ (save-excursion
|
|
|
+ (goto-char org-index--below-hline)
|
|
|
+ (org-index--do-sort-index org-index-sort-by)
|
|
|
+ (remove-hook 'before-save-hook 'org-index--sort-silent)))))
|
|
|
|
|
|
|
|
|
(defun org-index--idle-prepare ()
|
|
|
"For parsing table when idle."
|
|
|
(org-index--verify-id)
|
|
|
- (org-index--parse-table))
|
|
|
-
|
|
|
-
|
|
|
-(defun org-index-prepare-when-idle ()
|
|
|
- "Optionally fontify and sort index-table when idle, so that first interactive call is faster.
|
|
|
-You only need this if your index has grown so large, that first invocation of org-index needs
|
|
|
-a noticable amount of time."
|
|
|
- (run-with-idle-timer org-index--idle-delay nil 'org-index--idle-prepare))
|
|
|
+ (org-index--parse-table most-positive-fixnum t))
|
|
|
|
|
|
|
|
|
(defun org-index--copy-visible (beg end)
|