org-index.el version 4.1.0

This commit is contained in:
Marc-Oliver Ihm 2015-02-27 23:00:51 +01:00
parent b8921e8c78
commit e5a363e5fe
1 changed files with 57 additions and 89 deletions

View File

@ -3,7 +3,7 @@
;; Copyright (C) 2011-2015 Free Software Foundation, Inc. ;; Copyright (C) 2011-2015 Free Software Foundation, Inc.
;; Author: Marc Ihm <org-index@2484.de> ;; Author: Marc Ihm <org-index@2484.de>
;; Version: 4.0.0 ;; Version: 4.1.0
;; Keywords: outlines index ;; Keywords: outlines index
;; This file is not part of GNU Emacs. ;; This file is not part of GNU Emacs.
@ -73,35 +73,21 @@
;;; Change Log: ;;; Change Log:
;; [2015-02-26 Th] Version 4.0.0: ;; [2015-02-26 Th] Version 4.0.0 and 4.1.0:
;; - Removed command "leave"; rather go back with org-mark-ring-goto ;; - Removed command "leave"; rather go back with org-mark-ring-goto
;; - Property "org-index-ref" is no longer used or needed ;; - Property "org-index-ref" is no longer used or needed
;; - Renamed column "link" to "id" ;; - Renamed column "link" to "id"
;; - Added maintainance options to find duplicate rows, to check ids, ;; - Added maintainance options to find duplicate rows, to check ids,
;; update index or remove property org-index-ref from nodes ;; update index or remove property org-index-ref from nodes
;; - New command point
;; - Shortened versin history
;; ;;
;; [2015-01-31 Sa] Version 3.2.0: ;; [2014-12-07 Sa] to [2015-01-31 Sa] Version 3.0.0 to 3.2.0:
;; - Complete sorting of index only occurs in idle-timer ;; - Complete sorting of index only occurs in idle-timer
;; - Command "add" now updates index, if node is already present
;; - New command "maintain" with some subcommands ;; - New command "maintain" with some subcommands
;;
;; [2015-01-20 Mo] Version 3.1.1:
;; - Bugfix for delete within occur
;;
;; [2015-01-19 Mo] Version 3.1.0:
;; - Rewrote command "occur" with overlays in an indirect buffer ;; - Rewrote command "occur" with overlays in an indirect buffer
;; - Removed function `org-index-copy-references-from-heading-to-property'
;; - introduced variable org-index-version ;; - introduced variable org-index-version
;; ;; - Command "add" updates index, if node is already present
;; [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
;;
;; [2014-12-07 Sa] Version 3.0.0:
;; - New commands "add" and "delete" to easily add and remove ;; - New commands "add" and "delete" to easily add and remove
;; the current node to or from your index. ;; the current node to or from your index.
;; - New command "example" to create an example index. ;; - New command "example" to create an example index.
@ -112,70 +98,26 @@
;; "update", "link", "fill", "unhighlight" ;; "update", "link", "fill", "unhighlight"
;; - New function `org-index-default-keybindings' ;; - New function `org-index-default-keybindings'
;; ;;
;; [2014-04-26 Sa] Version 2.4.3: ;; [2012-12-07 Fr] to [2014-04-26 Sa] Version 2.0.0 to 2.4.3:
;; - Some Bug fixes and enhancements for occur-command
;; - Fixes for assistant to create index table
;;
;; [2014-02-01 Sa] Version 2.4.2:
;; - Follow mode in occur-buffer
;; - Reorder for x-columns
;;
;; [2014-01-02 Th] Version 2.4.0:
;; - New command "put" to store a nodes reference in a property
;; - New functions org-index-new-line and org-index-get-line ;; - New functions org-index-new-line and org-index-get-line
;; offer access to org-index from other lisp programs ;; offer access to org-index from other lisp programs
;; - New flag p, new columns x1,x2 and x3
;; - Major Code refactoring
;; - Regression tests with ert ;; - Regression tests with ert
;; - Lots of bug fixes ;; - Renamed from "org-favtable" to "org-index"
;; - Added an assistant to set up the index table
;; - occur is now incremental, searching as you type
;; - Integrated with org-mark-ring-goto
;; - Added full support for ids
;; - Renamed the package from "org-reftable" to "org-favtable"
;; - Additional columns are required (e.g. "link"). Error messages will
;; guide you
;; - Ask user explicitly, which command to invoke
;; - Renamed the package from "org-refer-by-number" to "org-reftable"
;; ;;
;; [2013-10-04 Fr] Version 2.3.2: ;; [2011-12-10 Sa] to [2012-09-22 Sa] Version Version 1.2.0 to 1.5.0:
;; - Bug fix: index-table created by assistant is found after
;; restart of emacs instead of invoking assistant again
;;
;; [2013-07-20 Sa] Version 2.3.0:
;; - Renamed from "org-favtable" to "org-index"
;; - Added an assistant to set up the index table
;; - occur is now incremental, searching as you type
;; - simplified the documentation and help-system
;; - Saving keystrokes, as "+g237" is now valid input
;; - Many bug fixes
;;
;; [2013-02-28 Th] Version 2.2.0:
;; - Allowed shortcuts like "h237" for command "head" with argument "237"
;; - Integrated with org-mark-ring-goto
;;
;; [2013-01-25 Fr] Version 2.1.0:
;; - Added full support for ids
;; - New commands "statistics"
;; - Renamed the package from "org-reftable" to "org-favtable"
;; - Additional columns are required (e.g. "link"). Error messages will
;; guide you
;;
;; [2012-12-07 Fr] Version 2.0.0:
;; - The format of the table of favorites has changed ! You need to bring
;; your existing table into the new format by hand (which however is
;; easy and explained below)
;; - Reference table can be sorted after usage count or date of last access
;; - Ask user explicitly, which command to invoke
;; - Renamed the package from "org-refer-by-number" to "org-reftable"
;;
;; [2012-09-22 Sa] Version 1.5.0:
;; - New command "sort" to sort a buffer or region by reference number ;; - New command "sort" to sort a buffer or region by reference number
;; - New commands "highlight" and "unhighlight" to mark references ;; - New commands "highlight" and "unhighlight" to mark references
;;
;; [2012-07-13 Fr] Version 1.4.0:
;; - New command "head" to find a headline with a reference number ;; - New command "head" to find a headline with a reference number
;;
;; [2012-04-28 Sa] Version 1.3.0:
;; - New commands occur and multi-occur ;; - New commands occur and multi-occur
;; - All commands can now be invoked explicitly
;; - New documentation
;; - Many bugfixes
;;
;; [2011-12-10 Sa] Version 1.2.0:
;; - Fixed a bug, which lead to a loss of newly created reference numbers
;; - Introduced single and double prefix arguments
;; - Started this Change Log ;; - Started this Change Log
;;; Code: ;;; Code:
@ -189,7 +131,7 @@
:group 'org-index) :group 'org-index)
;; Version of this package ;; Version of this package
(defvar org-index-version "4.0.0" "Version of `org-index', format is major.minor.bugfix, where \"major\" is a change in index-table and \"minor\" are new features.") (defvar org-index-version "4.1.0" "Version of `org-index', format is major.minor.bugfix, where \"major\" is a change in index-table and \"minor\" are new features.")
;; Variables to hold the configuration of the index table ;; Variables to hold the configuration of the index table
(defvar org-index--maxref nil "Maximum number from reference table (e.g. \"153\").") (defvar org-index--maxref nil "Maximum number from reference table (e.g. \"153\").")
@ -208,7 +150,6 @@
(defvar org-index-map nil "Keymap for shortcuts for some commands of `org-index'. Can be activated and filled by org-index-default-keybings.") (defvar org-index-map nil "Keymap for shortcuts for some commands of `org-index'. Can be activated and filled by org-index-default-keybings.")
;; Variables to hold context and state ;; Variables to hold context and state
(defvar org-index--text-to-yank nil "Text, that can be yanked after call (mostly a reference).")
(defvar org-index--last-ref nil "Last reference created or visited.") (defvar org-index--last-ref nil "Last reference created or visited.")
(defvar org-index--category-before nil "Category of node before.") (defvar org-index--category-before nil "Category of node before.")
(defvar org-index--active-region nil "Active region, initially. I.e. what has been marked.") (defvar org-index--active-region nil "Active region, initially. I.e. what has been marked.")
@ -224,7 +165,7 @@
(defvar org-index--aligned nil "Remember for this Emacs session, if table has been aligned at least once.") (defvar org-index--aligned nil "Remember for this Emacs session, if table has been aligned at least once.")
;; static information for this program package ;; static information for this program package
(defconst org-index--commands '(occur add delete head enter ref help example sort multi-occur highlight maintain) "List of commands available.") (defconst org-index--commands '(occur add delete head point enter ref help example sort multi-occur highlight maintain) "List of commands available.")
(defconst org-index--required-flags '(sort) "Flags that are required.") (defconst org-index--required-flags '(sort) "Flags that are required.")
(defconst org-index--single-flags '(sort point-on-add yank-after-add get-category-on-add get-heading-on-add shift-ref-and-date-on-add) "Flags, that may only appear once; these can appear as special-columns.") (defconst org-index--single-flags '(sort point-on-add yank-after-add get-category-on-add get-heading-on-add shift-ref-and-date-on-add) "Flags, that may only appear once; these can appear as special-columns.")
(defconst org-index--multiple-flags '(edit-on-add) "Flags, that might appear multiple times.") (defconst org-index--multiple-flags '(edit-on-add) "Flags, that might appear multiple times.")
@ -318,7 +259,7 @@ for its index table and its configuration flags.
For basic usage, subcommands 'add' and 'occur' are most important. For basic usage, subcommands 'add' and 'occur' are most important.
This is version 4.0.0 of org-index.el. This is version 4.1.0 of org-index.el.
\\<org-mode-map> \\<org-mode-map>
The function `org-index' operates on a dedicated table, the index The function `org-index' operates on a dedicated table, the index
table, which lives within its own Org-mode node. The table and table, which lives within its own Org-mode node. The table and
@ -349,6 +290,8 @@ of subcommands to choose from:
enter: Enter index table and maybe go to a specific reference; enter: Enter index table and maybe go to a specific reference;
use `org-mark-ring-goto' (\\[org-mark-ring-goto]) to go back. use `org-mark-ring-goto' (\\[org-mark-ring-goto]) to go back.
point: Echo information from index table for node at point.
ref: Create a new reference. ref: Create a new reference.
help: Show this text. help: Show this text.
@ -582,6 +525,21 @@ as in interactive calls."
(recenter)) (recenter))
((eq command 'point)
(let (id info)
(setq id (org-id-get))
(if id
(setq info (org-index--on 'id id
(mapcar (lambda (x) (org-index--get-or-set-field x))
(list 'created 'count 'last-accessed 'ref)))))
(if info
(progn
(setq message-text (apply 'format (cons "Created %s, %s times accessed, last %s" info)))
(setq kill-new-text (car (last info))))
(setq message-text "This node is not part of index"))))
((eq command 'occur) ((eq command 'occur)
(set-buffer org-index--buffer) (set-buffer org-index--buffer)
@ -713,10 +671,22 @@ as in interactive calls."
"Set default keybindings for `org-index'. "Set default keybindings for `org-index'.
Establish the common prefix key `C-c i' Which is followed by the Establish the common prefix key `C-c i' Which is followed by the
first letter of a subcommand, so that `C-c i a' invokes the first letter of selected subcommands:
subcommand \"add\". Subcommands available are occur, add, delete,
head, enter and ref. Special cases: `C-c i ?' shows help and key binding
`C-c i i' invokes `org-index' to let you choose." --- -------
i show complete list of commands
o subcommand occur
a add
d delete
h head
e enter
p or . point
r ref
? help
See `org-index' for a description of all subcommands."
(interactive) (interactive)
(define-prefix-command 'org-index-map) (define-prefix-command 'org-index-map)
(global-set-key (kbd "C-c i") 'org-index-map) (global-set-key (kbd "C-c i") 'org-index-map)
@ -726,7 +696,8 @@ head, enter and ref. Special cases: `C-c i ?' shows help and
(define-key org-index-map (kbd "d") (lambda (arg) (interactive "P") (message nil) (org-index 'delete nil arg))) (define-key org-index-map (kbd "d") (lambda (arg) (interactive "P") (message nil) (org-index 'delete nil arg)))
(define-key org-index-map (kbd "h") (lambda (arg) (interactive "P") (message nil) (org-index 'head nil arg))) (define-key org-index-map (kbd "h") (lambda (arg) (interactive "P") (message nil) (org-index 'head nil arg)))
(define-key org-index-map (kbd "e") (lambda (arg) (interactive "P") (message nil) (org-index 'enter nil arg))) (define-key org-index-map (kbd "e") (lambda (arg) (interactive "P") (message nil) (org-index 'enter nil arg)))
(define-key org-index-map (kbd "r") (lambda (arg) (interactive "P") (message nil) (org-index 'ref nil arg))) (define-key org-index-map (kbd "p") (lambda (arg) (interactive "P") (message nil) (org-index 'point nil arg)))
(define-key org-index-map (kbd ".") (lambda (arg) (interactive "P") (message nil) (org-index 'point nil arg)))
(define-key org-index-map (kbd "?") (lambda (arg) (interactive "P") (message nil) (org-index 'help nil arg)))) (define-key org-index-map (kbd "?") (lambda (arg) (interactive "P") (message nil) (org-index 'help nil arg))))
@ -792,7 +763,7 @@ Optional argument KEYS-VALUES specifies content of new line."
;; align table and fontify line ;; align table and fontify line
(org-table-align) (org-table-align)
(setq org-table--aligned t) (setq org-index--aligned t)
(font-lock-fontify-region (line-beginning-position) (line-end-position)) (font-lock-fontify-region (line-beginning-position) (line-end-position))
;; get column to yank ;; get column to yank
@ -2400,9 +2371,6 @@ If OTHER in separate window."
(unless new (unless new
(setq new (format "%s%d%s" org-index--head (1+ org-index--maxref) org-index--tail))) (setq new (format "%s%d%s" org-index--head (1+ org-index--maxref) org-index--tail)))
;; remember for org-mark-ring-goto
(setq org-index--text-to-yank new)
;; insert ref or id as last or first line, depending on sort-column ;; insert ref or id as last or first line, depending on sort-column
(goto-char org-index--below-hline) (goto-char org-index--below-hline)
(if (eq (org-index--special-column 'sort) 'count) (if (eq (org-index--special-column 'sort) 'count)