org-index.el version 5.6.2

This commit is contained in:
U-IHM-NOTEBOOK\Olli 2017-10-10 20:28:03 +02:00
parent 0b83168465
commit 4d828ba4c6
1 changed files with 70 additions and 95 deletions

View File

@ -3,7 +3,7 @@
;; Copyright (C) 2011-2017 Free Software Foundation, Inc.
;; Author: Marc Ihm <org-index@2484.de>
;; Version: 5.6.1
;; Version: 5.6.2
;; Keywords: outlines index
;; This file is not part of GNU Emacs.
@ -51,13 +51,11 @@
;;
;; - 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)
;;
;; - Restart your Emacs to make this effective.
;;
;; - Invoke `org-index'; on first run it will assist in creating your
;; index table.
;;
@ -68,7 +66,6 @@
;; Further information:
;;
;; - Watch the screencast at http://2484.de/org-index.html.
;;
;; - See the documentation of `org-index', which can also be read by
;; invoking `org-index' and choosing the command help or '?'.
;;
@ -76,81 +73,20 @@
;; Updates:
;;
;; The latest published version of this file can always be found at:
;;
;; http://orgmode.org/w/?p=org-mode.git;a=blob_plain;f=contrib/lisp/org-index.el;hb=HEAD
;;
;; Development version under:
;;
;; https://github.com/marcIhm/org-index
;;
;;
;;; Change Log:
;; [2017-09-25 Mo] Version 5.6.1
;; - Quick repeat for goto-focus
;; - Bugfixes
;;
;; - See the command 'news' for recent changes, or
;; - https://github.com/marcIhm/org-index/ChangeLog.org for older news
;; - https://github.com/marcIhm/org-index/commits/master for a complete list of changes
;;
;; [2017-09-03 So] Version 5.5.0
;; - Standard case-folding in occur
;; - Better handling of nested focus nodes
;; - Bugfixes
;;
;; [2015-12-29 Tu] to [2017-06-06 Tu] Version 5.0.2 to 5.4.2
;; - New commands yank, column and edit
;; - New command focus
;; - New column tags
;; - All columns are now required
;; - References are now optional
;; - Subcommand enter has been renamed to index
;; - Subcommands kill and edit can be invoked from an occur buffer
;; - Added link to screencast
;; - Occur accepts a numeric argument as a day span
;; - Speed improvements
;; - Many Bugfixes
;;
;; [2015-02-26 Th] to [2015-08-20 Th] Version 4.0.0 to 4.3.0
;; - Configuration is done now via standard customize
;; - New sorting strategy 'mixed'
;; - Removed command "leave"; rather go back with org-mark-ring-goto
;; - Renamed column "link" to "id"
;; - Added maintainance options to find duplicate rows, to check ids,
;; update index or remove property org-index-ref from nodes
;; - Shortened version history
;; - Reference numbers for subcommands can be passed as a prefix argument
;;
;; [2014-12-08 Mo] to [2015-01-31 Sa] Version 3.0.0 to 3.2.0:
;; - Complete sorting of index only occurs in idle-timer
;; - New command "maintain" with some subcommands
;; - Rewrote command "occur" with overlays in an indirect buffer
;; - Command "add" updates index, if node is already present
;; - New commands "add" and "delete" to easily add and remove
;; the current node to or from your index.
;; - New command "example" to create an example index.
;; - Several new flags that are explained within index node.
;; - Removed commands "reuse", "missing", "put", "goto",
;; "update", "link", "fill", "unhighlight"
;; - New function `org-index-default-keybindings'
;;
;; [2012-12-07 Fr] to [2014-04-26 Sa] Version 2.0.0 to 2.4.3:
;; - New functions org-index-new-line and org-index-get-line
;; offer access to org-index from other lisp programs
;; - Regression tests with ert
;; - 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"
;;
;; [2011-12-10 Sa] to [2012-09-22 Sa] Version Version 1.2.0 to 1.5.0:
;; - New command "sort" to sort a buffer or region by reference number
;; - New commands "highlight" and "unhighlight" to mark references
;; - New command "head" to find a headline with a reference number
;; - New commands occur and multi-occur
;; - Started this Change Log
;;; Code:
@ -160,7 +96,7 @@
(require 'widget)
;; Version of this package
(defvar org-index-version "5.6.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.6.2" "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
@ -314,6 +250,7 @@ those pieces."
(defvar org-index--context-occur nil "Position and line used for occur in edit buffer.")
(defvar org-index--context-node nil "Buffer and position for node in edit buffer.")
(defvar org-index--short-help-buffer-name "*org-index commands*" "Name of buffer to display short help.")
(defvar org-index--news-buffer-name "*org-index news*" "Name of buffer to display news.")
(defvar org-index--display-short-help nil "True, if short help should be displayed.")
(defvar org-index--short-help-displayed nil "True, if short help message has been displayed.")
(defvar org-index--prefix-arg nil "True, if prefix argument has been received during input.")
@ -324,7 +261,7 @@ those pieces."
(defvar org-index--last-command nil "Subcommand, that hast been excecuted last.")
;; static information for this program package
(defconst org-index--commands '(occur add kill head ping index ref yank column edit help short-help focus example sort find-ref highlight maintain) "List of commands available.")
(defconst org-index--commands '(occur add kill head ping index ref yank column edit help short-help news focus example sort find-ref highlight maintain) "List of commands available.")
(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.")
@ -377,7 +314,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.6.0 of org-index.el.
This is version 5.6.2 of org-index.el.
The function `org-index' is the only interactive function of this
@ -439,6 +376,8 @@ of subcommands to choose from:
I.e. from the complete help, show only the first line for each
subcommand.
news: [n] Show news for the current point release.
example: Create an example index, that will not be saved.
May serve as an example.
@ -528,11 +467,13 @@ interactive calls."
;; read command; if requested display help in read-loop
(setq org-index--display-short-help (eq command 'short-help))
(setq command (org-index--read-command))
(setq org-index--last-command org-index--this-command)
(setq org-index--this-command command)
(if org-index--prefix-arg (setq arg (or arg '(4))))
(setq org-index--display-short-help nil))
(setq org-index--last-command org-index--this-command)
(setq org-index--this-command command)
;;
;; Get search string, if required; process possible sources one after
;; another (lisp argument, prefix argument, user input).
@ -629,6 +570,24 @@ interactive calls."
(org-index--display-short-help))
((eq command 'news)
(with-current-buffer-window
org-index--news-buffer-name nil nil
(insert (format "News for Version %s of org-index:\n"
(progn
(string-match "\\([0-9]+\\.[0-9]+\\)\\." org-index-version)
(match-string 1 org-index-version))))
(insert "
- Quick repeat with delete-option for goto-focus
- Moved Changelog to its own file
- New command 'news'
- Bugfixes
")
(insert "\nSee https://github.com/marcIhm/org-index/ChangeLog.org for older news.\n")
(org-mode))
(shrink-window-if-larger-than-buffer (get-buffer-window org-index--news-buffer-name)))
((eq command 'find-ref)
;; Construct list of all org-buffers
@ -1014,10 +973,8 @@ Optional argument KEYS-VALUES specifies content of new line."
(princ "Short help; shortcuts in []; capital letter acts like C-u.\n")
(princ (org-index--get-short-help-text)))
(with-current-buffer org-index--short-help-buffer-name
(let ((inhibit-read-only t)
win)
(setq win (get-buffer-window))
(shrink-window-if-larger-than-buffer win)
(let ((inhibit-read-only t))
(shrink-window-if-larger-than-buffer (get-buffer-window))
(goto-char (point-min))
(end-of-line)
(goto-char (point-min)))))
@ -1091,9 +1048,16 @@ Optional argument KEYS-VALUES specifies content of new line."
(define-key map (vector ?f)
(lambda () (interactive)
(setq this-command last-command)
(setq org-index--this-command org-index--last-command)
(message (concat (org-index--goto-focus) "."))))
(define-key map (vector ?d)
(lambda () (interactive)
(setq this-command last-command)
(org-index--delete-from-focus)
(org-index--persist-focused-nodes)
(message (concat "Current node has been removed from list of focused nodes, " (org-index--goto-focus) "."))))
map) t)
(setq repeat-clause ", type 'f' to repeat")
(setq repeat-clause "; type 'f' to repeat or 'd' to delete this node from list")
(if (member target-id (org-index--ids-up-to-top))
(setq explain "Staying below current")
@ -1175,24 +1139,35 @@ Optional argument KEYS-VALUES specifies content of new line."
"Current node has been appended to list of focused nodes%s (%d node%s in focus)")
((eq char ?d)
(setq id (org-id-get))
(if (and id (member id org-index--ids-focused-nodes))
(progn
(setq org-index--id-last-goto-focus
(or (car-safe (cdr-safe (member id (reverse (append org-index--ids-focused-nodes
org-index--ids-focused-nodes)))))
org-index--id-last-goto-focus))
(setq org-index--ids-focused-nodes (delete id org-index--ids-focused-nodes))
(setq org-index--id-last-goto-focus nil)
"Current node has been removed from list of focused nodes%s (%d node%s in focus)")
"Current node has not been in list of focused nodes%s (%d node%s in focus)"))))
(with-current-buffer org-index--buffer
(org-entry-put org-index--point "ids-focused-nodes" (string-join org-index--ids-focused-nodes " ")))
(org-index--delete-from-focus))))
(org-index--persist-focused-nodes)
(format text (or more-text "") (length org-index--ids-focused-nodes) (if (cdr org-index--ids-focused-nodes) "s" ""))))
(defun org-index--persist-focused-nodes ()
"Write list of focused nodes to property."
(with-current-buffer org-index--buffer
(org-entry-put org-index--point "ids-focused-nodes" (string-join org-index--ids-focused-nodes " "))))
(defun org-index--delete-from-focus ()
"Delete current node from list of focused nodes"
(let (id)
(setq id (org-id-get))
(if (and id (member id org-index--ids-focused-nodes))
(progn
(setq org-index--id-last-goto-focus
(or (car-safe (cdr-safe (member id (reverse (append org-index--ids-focused-nodes
org-index--ids-focused-nodes)))))
org-index--id-last-goto-focus))
(setq org-index--ids-focused-nodes (delete id org-index--ids-focused-nodes))
(setq org-index--id-last-goto-focus nil)
"Current node has been removed from list of focused nodes%s (%d node%s in focus)")
"Current node has not been in list of focused nodes%s (%d node%s in focus)")))
(defun org-index--ids-up-to-top ()
"Get list of all ids from current node up to top level."
(when (string= major-mode "org-mode")