Browse Source

Merged BibTeX code from org.el and org-bibtex.el.

org-bibtex.el is now a core module.
Carsten Dominik 17 years ago
parent
commit
dc0fe33f67
5 changed files with 87 additions and 91 deletions
  1. 0 1
      CONTRIB/README
  2. 6 0
      ChangeLog
  3. 1 1
      Makefile
  4. 78 28
      lisp/org-bibtex.el
  5. 2 61
      lisp/org.el

+ 0 - 1
CONTRIB/README

@@ -11,7 +11,6 @@ LISP (emacs-lisp code)
 ======================
 ======================
 
 
 org-annotate-file.el --- Annotate a file with org syntax
 org-annotate-file.el --- Annotate a file with org syntax
-org-bibtex.el        --- Org links to BibTeX entries
 org-bookmark.el      --- Org links to bookmarks
 org-bookmark.el      --- Org links to bookmarks
 org-depend.el        --- TODO dependencies for Org-mode
 org-depend.el        --- TODO dependencies for Org-mode
 org-elisp-symbol.el  --- Org links to emacs-lisp symbols
 org-elisp-symbol.el  --- Org links to emacs-lisp symbols

+ 6 - 0
ChangeLog

@@ -1,5 +1,11 @@
 2008-04-03  Carsten Dominik  <dominik@science.uva.nl>
 2008-04-03  Carsten Dominik  <dominik@science.uva.nl>
 
 
+	* lisp/org.el (org-modules): Add entry for org-bibtex.el.
+
+	* lisp/org-bibtex.el (org-create-file-search-in-bibtex): New file,
+	a combination of the BibTeX that used to be in org.el, and the
+	org-bibtex.el extension written by Bastien Guerry.
+
 	* lisp/org-exp.el (org-export-html-handle-js-options): New function.
 	* lisp/org-exp.el (org-export-html-handle-js-options): New function.
 	(org-export-html-infojs-setup): New option.
 	(org-export-html-infojs-setup): New option.
 	(org-export-as-html): Call `org-export-html-handle-js-options'.
 	(org-export-as-html): Call `org-export-html-handle-js-options'.

+ 1 - 1
Makefile

@@ -64,7 +64,7 @@ LISPF      = org.el \
 	     org-compat.el org-macs.el \
 	     org-compat.el org-macs.el \
 	     org-table.el org-exp.el org-remember.el org-agenda.el\
 	     org-table.el org-exp.el org-remember.el org-agenda.el\
 	     org-publish.el org-mouse.el org-export-latex.el \
 	     org-publish.el org-mouse.el org-export-latex.el \
-	     org-bbdb.el org-gnus.el org-info.el org-irc.el \
+	     org-bbdb.el org-bibtex.el org-gnus.el org-info.el org-irc.el \
              org-mac-message.el org-mhe.el org-rmail.el org-vm.el org-wl.el
              org-mac-message.el org-mhe.el org-rmail.el org-vm.el org-wl.el
 LISPFILES0 = $(LISPF:%=lisp/%)
 LISPFILES0 = $(LISPF:%=lisp/%)
 LISPFILES  = $(LISPFILES0) lisp/org-install.el
 LISPFILES  = $(LISPFILES0) lisp/org-install.el

+ 78 - 28
CONTRIB/lisp/org-bibtex.el → lisp/org-bibtex.el

@@ -1,33 +1,39 @@
 ;;; org-bibtex.el --- Org links to BibTeX entries
 ;;; org-bibtex.el --- Org links to BibTeX entries
 ;;
 ;;
-;; Copyright 2007 Bastien Guerry
+;; Copyright 2007, 2008 Free Software Foundation, Inc.
 ;;
 ;;
-;; Author: bzg AT altern DOT org
-;; Version: 0.2
+;; Author: Bastien Guerry <bzg at altern dot org>
+;;         Carsten Dominik <carsten dot dominik at gmail dot com>
 ;; Keywords: org, wp, remember
 ;; Keywords: org, wp, remember
-;; URL: http://www.cognition.ens.fr/~guerry/u/org-bibtex.el
+;; Version: 6.00pre-2
 ;;
 ;;
-;; This program is free software; you can redistribute it and/or modify
+;; This file is part of GNU Emacs.
+;;
+;; GNU Emacs is free software; you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
 ;; it under the terms of the GNU General Public License as published by
 ;; the Free Software Foundation; either version 3, or (at your option)
 ;; the Free Software Foundation; either version 3, or (at your option)
 ;; any later version.
 ;; any later version.
-;;
-;; This program is distributed in the hope that it will be useful,
+
+;; GNU Emacs is distributed in the hope that it will be useful,
 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 ;; GNU General Public License for more details.
 ;; GNU General Public License for more details.
-;;
+
 ;; You should have received a copy of the GNU General Public License
 ;; You should have received a copy of the GNU General Public License
-;; along with this program; if not, write to the Free Software
-;; Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
 ;;
 ;;
 ;;; Commentary:
 ;;; Commentary:
 ;;
 ;;
-;; The Org mode already lets you store/insert links to BibTeX entries.
+;; This file implements links to database entries in BibTeX files.
+;; Instead of defining a special link prefix, it uses the normal file
+;; links combined with a custom search mechanism to find entries
+;; by reference key.  And it constucts a nice description tag for
+;; the link that contains the author name, the year and a short title.
 ;;
 ;;
-;; But what if you want to insert the author or the title of a BibTeX
-;; item in a *remember* buffer?  This library lets you deal with this 
-;; by adding more properties to the BibTeX link.
+;; It also stores detailed information about the entry so that
+;; remember templates can access and enter this information easily.
 ;;
 ;;
 ;; The available properties for each entry are listed here:
 ;; The available properties for each entry are listed here:
 ;;
 ;;
@@ -70,19 +76,25 @@
 ;;
 ;;
 ;;; History:
 ;;; History:
 ;; 
 ;; 
-;; This piece of code was inspired by a request of Austin Frank:
-;;   http://article.gmane.org/gmane.emacs.orgmode/4112
+;; The link creation part has been part of Org-mode for a long time.
+;; 
+;; Creating better remember template information was inspired by a request
+;; of Austin Frank: http://article.gmane.org/gmane.emacs.orgmode/4112
+;; and then imlemented by Bastien Guerry.
 ;;
 ;;
-;; Put this file into your load-path and the following into your ~/.emacs:
-;;   (require 'org-bibtex)
+;; Org-mode loads this module by default - if this is not what you want,
+;; configure the variable `org-modules'.
 
 
 ;;; Code:
 ;;; Code:
 
 
-(provide 'org-bibtex)
-
 (require 'org)
 (require 'org)
 
 
-(defvar description nil) ; dynamically scoped in org.el
+(defvar description nil) ; dynamically scoped from org.el
+
+(declare-function bibtex-beginning-of-entry "bibtex" ())
+(declare-function bibtex-generate-autokey "bibtex" ())
+(declare-function bibtex-parse-entry "bibtex" (&optional content))
+(declare-function bibtex-url "bibtex" (&optional pos no-browse))
 
 
 (org-add-link-type "bibtex" 'org-bibtex-open)
 (org-add-link-type "bibtex" 'org-bibtex-open)
 (add-hook 'org-store-link-functions 'org-bibtex-store-link)
 (add-hook 'org-store-link-functions 'org-bibtex-store-link)
@@ -108,8 +120,7 @@
 (defun org-bibtex-store-link ()
 (defun org-bibtex-store-link ()
   "Store a link to a BibTeX entry."
   "Store a link to a BibTeX entry."
   (when (eq major-mode 'bibtex-mode)
   (when (eq major-mode 'bibtex-mode)
-    (let* ((search (run-hook-with-args-until-success
-		    'org-create-file-search-functions))
+    (let* ((search (org-create-file-search-in-bibtex))
 	   (link (concat "file:" (abbreviate-file-name buffer-file-name)
 	   (link (concat "file:" (abbreviate-file-name buffer-file-name)
 			 "::" search))
 			 "::" search))
 	   (entry (mapcar ; repair strings enclosed in "..." or {...}
 	   (entry (mapcar ; repair strings enclosed in "..." or {...}
@@ -143,12 +154,51 @@
        :link link
        :link link
        :description description))))
        :description description))))
 
 
-(provide 'org-bibtex)
+(defun org-create-file-search-in-bibtex ()
+  "Create the search string and description for a BibTeX database entry."
+  ;; Make a good description for this entry, using names, year and the title
+  ;; Put it into the `description' variable which is dynamically scoped.
+  (let ((bibtex-autokey-names 1)
+	(bibtex-autokey-names-stretch 1)
+	(bibtex-autokey-name-case-convert-function 'identity)
+	(bibtex-autokey-name-separator " & ")
+	(bibtex-autokey-additional-names " et al.")
+	(bibtex-autokey-year-length 4)
+	(bibtex-autokey-name-year-separator " ")
+	(bibtex-autokey-titlewords 3)
+	(bibtex-autokey-titleword-separator " ")
+	(bibtex-autokey-titleword-case-convert-function 'identity)
+	(bibtex-autokey-titleword-length 'infty)
+	(bibtex-autokey-year-title-separator ": "))
+    (setq description (bibtex-generate-autokey)))
+  ;; Now parse the entry, get the key and return it.
+  (save-excursion
+    (bibtex-beginning-of-entry)
+    (cdr (assoc "=key=" (bibtex-parse-entry)))))
 
 
-
-;;;;##########################################################################
-;;;;  User Options, Variables
-;;;;##########################################################################
+(defun org-execute-file-search-in-bibtex (s)
+  "Find the link search string S as a key for a database entry."
+  (when (eq major-mode 'bibtex-mode)
+    ;; Yes, we want to do the search in this file.
+    ;; We construct a regexp that searches for "@entrytype{" followed by the key
+    (goto-char (point-min))
+    (and (re-search-forward (concat "@[a-zA-Z]+[ \t\n]*{[ \t\n]*"
+				    (regexp-quote s) "[ \t\n]*,") nil t)
+	 (goto-char (match-beginning 0)))
+    (if (and (match-beginning 0) (equal current-prefix-arg '(16)))
+	;; Use double prefix to indicate that any web link should be browsed
+	(let ((b (current-buffer)) (p (point)))
+	  ;; Restore the window configuration because we just use the web link
+	  (set-window-configuration org-window-config-before-follow-link)
+	  (save-excursion (set-buffer b) (goto-char p)
+	    (bibtex-url)))
+      (recenter 0))  ; Move entry start to beginning of window
+  ;; return t to indicate that the search is done.
+    t))
+
+;; Finally add the link search function to the right hook.
+(add-hook 'org-execute-file-search-functions 'org-execute-file-search-in-bibtex)
 
 
+(provide 'org-bibtex)
 
 
 ;;; org-bibtex.el ends here
 ;;; org-bibtex.el ends here

+ 2 - 61
lisp/org.el

@@ -139,7 +139,7 @@ With prefix arg HERE, insert it at point."
   (when (featurep 'org)
   (when (featurep 'org)
     (org-load-modules-maybe 'force)))
     (org-load-modules-maybe 'force)))
 
 
-(defcustom org-modules '(org-bbdb org-gnus org-info org-irc org-mhe org-rmail org-vm org-wl)
+(defcustom org-modules '(org-bbdb org-bibtex org-gnus org-info org-irc org-mhe org-rmail org-vm org-wl)
   "Modules that should always be loaded together with org.el.
   "Modules that should always be loaded together with org.el.
 If a description starts with <C>, the file is not part of emacs
 If a description starts with <C>, the file is not part of emacs
 and loading it will require that you have downloaded and properly installed
 and loading it will require that you have downloaded and properly installed
@@ -156,6 +156,7 @@ to add the symbol `xyz', and the package must have a call to
   :type
   :type
   '(set :greedy t
   '(set :greedy t
 	(const :tag "   bbdb:              Links to BBDB entries" org-bbdb)
 	(const :tag "   bbdb:              Links to BBDB entries" org-bbdb)
+	(const :tag "   bibtex:            Links to BibTeX entries" org-bibtex)
 	(const :tag "   gnus:              Links to GNUS folders/messages" org-gnus)
 	(const :tag "   gnus:              Links to GNUS folders/messages" org-gnus)
 	(const :tag "   info:              Links to Info nodes" org-info)
 	(const :tag "   info:              Links to Info nodes" org-info)
 	(const :tag "   irc:               Links to IRC/ERC chat sessions" org-irc)
 	(const :tag "   irc:               Links to IRC/ERC chat sessions" org-irc)
@@ -167,7 +168,6 @@ to add the symbol `xyz', and the package must have a call to
 	(const :tag "   mouse:             Additional mouse support" org-mouse)
 	(const :tag "   mouse:             Additional mouse support" org-mouse)
 
 
 	(const :tag "C  annotate-file:     Annotate a file with org syntax" org-annotate-file)
 	(const :tag "C  annotate-file:     Annotate a file with org syntax" org-annotate-file)
-	(const :tag "C  bibtex:            Org links to BibTeX entries" org-bibtex)
 	(const :tag "C  bookmark:          Org links to bookmarks" org-bookmark)
 	(const :tag "C  bookmark:          Org links to bookmarks" org-bookmark)
 	(const :tag "C  depend:            TODO dependencies for Org-mode" org-depend)
 	(const :tag "C  depend:            TODO dependencies for Org-mode" org-depend)
 	(const :tag "C  elisp-symbol:      Org links to emacs-lisp symbols" org-elisp-symbol)
 	(const :tag "C  elisp-symbol:      Org links to emacs-lisp symbols" org-elisp-symbol)
@@ -2680,10 +2680,6 @@ If it is less than 8, the level-1 face gets re-used for level N+1 etc."
 
 
 ;; Various packages
 ;; Various packages
 ;; FIXME: get the argument lists for the UNKNOWN stuff
 ;; FIXME: get the argument lists for the UNKNOWN stuff
-(declare-function bibtex-beginning-of-entry "bibtex" ())
-(declare-function bibtex-generate-autokey "bibtex" ())
-(declare-function bibtex-parse-entry "bibtex" (&optional content))
-(declare-function bibtex-url "bibtex" (&optional pos no-browse))
 (declare-function calendar-absolute-from-iso    "cal-iso"    (&optional date))
 (declare-function calendar-absolute-from-iso    "cal-iso"    (&optional date))
 (declare-function calendar-forward-day          "cal-move"   (arg))
 (declare-function calendar-forward-day          "cal-move"   (arg))
 (declare-function calendar-goto-date            "cal-move"   (date))
 (declare-function calendar-goto-date            "cal-move"   (date))
@@ -7673,61 +7669,6 @@ onto the ring."
    (t (error "This should not happen"))))
    (t (error "This should not happen"))))
 
 
 
 
-;;; BibTeX links
-
-;; Use the custom search meachnism to construct and use search strings for
-;; file links to BibTeX database entries.
-
-(defun org-create-file-search-in-bibtex ()
-  "Create the search string and description for a BibTeX database entry."
-  (when (eq major-mode 'bibtex-mode)
-    ;; yes, we want to construct this search string.
-    ;; Make a good description for this entry, using names, year and the title
-    ;; Put it into the `description' variable which is dynamically scoped.
-    (let ((bibtex-autokey-names 1)
-	  (bibtex-autokey-names-stretch 1)
-	  (bibtex-autokey-name-case-convert-function 'identity)
-	  (bibtex-autokey-name-separator " & ")
-	  (bibtex-autokey-additional-names " et al.")
-	  (bibtex-autokey-year-length 4)
-	  (bibtex-autokey-name-year-separator " ")
-	  (bibtex-autokey-titlewords 3)
-	  (bibtex-autokey-titleword-separator " ")
-	  (bibtex-autokey-titleword-case-convert-function 'identity)
-	  (bibtex-autokey-titleword-length 'infty)
-	  (bibtex-autokey-year-title-separator ": "))
-      (setq description (bibtex-generate-autokey)))
-    ;; Now parse the entry, get the key and return it.
-    (save-excursion
-      (bibtex-beginning-of-entry)
-      (cdr (assoc "=key=" (bibtex-parse-entry))))))
-
-(defun org-execute-file-search-in-bibtex (s)
-  "Find the link search string S as a key for a database entry."
-  (when (eq major-mode 'bibtex-mode)
-    ;; Yes, we want to do the search in this file.
-    ;; We construct a regexp that searches for "@entrytype{" followed by the key
-    (goto-char (point-min))
-    (and (re-search-forward (concat "@[a-zA-Z]+[ \t\n]*{[ \t\n]*"
-				    (regexp-quote s) "[ \t\n]*,") nil t)
-	 (goto-char (match-beginning 0)))
-    (if (and (match-beginning 0) (equal current-prefix-arg '(16)))
-	;; Use double prefix to indicate that any web link should be browsed
-	(let ((b (current-buffer)) (p (point)))
-	  ;; Restore the window configuration because we just use the web link
-	  (set-window-configuration org-window-config-before-follow-link)
-	  (save-excursion (set-buffer b) (goto-char p)
-	    (bibtex-url)))
-      (recenter 0))  ; Move entry start to beginning of window
-  ;; return t to indicate that the search is done.
-    t))
-
-;; Finally add the functions to the right hooks.
-(add-hook 'org-create-file-search-functions 'org-create-file-search-in-bibtex)
-(add-hook 'org-execute-file-search-functions 'org-execute-file-search-in-bibtex)
-
-;; end of Bibtex link setup
-
 ;;; Following file links
 ;;; Following file links
 
 
 (defun org-open-file (path &optional in-emacs line search)
 (defun org-open-file (path &optional in-emacs line search)