annotate lisp/auctex/bib-cite.el @ 24:4103f0995bd7 r19-15b95

Import from CVS: tag r19-15b95
author cvs
date Mon, 13 Aug 2007 08:51:03 +0200
parents
children ec9a17fef872
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
24
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1 ;; bib-cite.el - Display \cite, \ref or \label / Extract refs from BiBTeX file.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
3 ;; Copyright (C) 1994, 1995, 1996, 1997 Peter S. Galbraith
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
4
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
5 ;; Author: Peter S. Galbraith <rhogee@bathybius.meteo.mcgill.ca>
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
6 ;; Created: 06 July 1994
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
7 ;; Version: 2.28 (22 January 97)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
8 ;; Keywords: bibtex, cite, auctex, emacs, xemacs
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
9
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
10 ;; RCS $Id: bib-cite.el,v 1.1 1997/02/20 02:16:50 steve Exp $
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
11 ;; Note: RCS version number does not correspond to release number.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
12
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
13 ;; Everyone is granted permission to copy, modify and redistribute this
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
14 ;; file provided:
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
15 ;; 1. All copies contain this copyright notice.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
16 ;; 2. All modified copies shall carry a prominant notice stating who
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
17 ;; made modifications and the date of such modifications.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
18 ;; 3. The name of the modified file be changed.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
19 ;; 4. No charge is made for this software or works derived from it.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
20 ;; This clause shall not be construed as constraining other software
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
21 ;; distributed on the same medium as this software, nor is a
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
22 ;; distribution fee considered a charge.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
23
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
24 ;; LCD Archive Entry:
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
25 ;; bib-cite|Peter Galbraith|galbraith@mixing.qc.dfo.ca|
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
26 ;; Display \cite, \ref or \label / Extract refs from BiBTeX file.|
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
27 ;; 22-Jan-1997|2.28|~/misc/bib-cite.el.gz|
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
28
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
29 ;; ----------------------------------------------------------------------------
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
30 ;;; Commentary:
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
31
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
32 ;; New versions of this package (if they exist) may be found at:
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
33 ;; ftp://ftp.phys.ocean.dal.ca/users/rhogee/elisp/bib-cite.el
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
34
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
35 ;; Operating Systems:
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
36 ;; Works in unix, DOS and OS/2. Developped under Linux.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
37 ;; VMS: I have no clue if this works under VMS. I don't know how emacs handle
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
38 ;; logical names (i.e. for BIBINPUTS) but I am willing to fix this package for
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
39 ;; VMS if someone if willing to test it and answer questions.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
40
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
41 ;; AUC-TEX USERS:
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
42 ;; auc-tex is a super-charged LaTeX mode for emacs. Get it at:
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
43 ;; ftp://ftp.iesd.auc.dk/pub/emacs-lisp/auctex.tar.gz <-stable release
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
44 ;; ftp://ftp.dina.kvl.dk/pub/Staff/Per.Abrahamsen/auctex/ <-alpha release
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
45 ;;
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
46 ;; WWW users may want to check out the AUC TeX page at
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
47 ;; http://www.iesd.auc.dk/~amanda/auctex/
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
48 ;;
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
49 ;; bib-cite.el is included in the auc-tex distribution. Therefore, if
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
50 ;; you use auc-tex, you probably have an old version of bib-cite.el in
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
51 ;; your load-path which may get loaded instead of this file (unless this
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
52 ;; is the auc-tex file!). Make sure you replace that file, or rename it,
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
53 ;; or delete it!!!
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
54
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
55 ;; MS-DOS USERS:
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
56 ;; Multifile documents are supported by bib-cite by using etags (TAGS files)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
57 ;; which contains a bug for MSDOS (at least for emacs 19.27 it does).
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
58 ;; Get the file
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
59 ;; ftp://ftp.phys.ocean.dal.ca/users/rhogee/elisp/bib-cite.etags-bug-report
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
60 ;; to see what patches to make to etags.c to fix it.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
61
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
62 ;; Description:
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
63 ;; ~~~~~~~~~~~
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
64 ;; This package is used in various TeX modes to display or edit references
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
65 ;; associated with \cite commands, or matching \ref and \label commands.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
66 ;; (so I actually overstep BiBTeX bounds here...)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
67 ;; These are the functions:
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
68 ;;
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
69 ;; bib-display bib-display-mouse
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
70 ;; - Display citation, \ref or \label under point
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
71 ;; bib-find bib-find-mouse
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
72 ;; - Edit citation, \ref or \label under point
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
73 ;; bib-make-bibliography - Make BiBTeX file containing only cite keys used.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
74 ;; bib-apropos - Search BiBTeX source files for keywords.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
75 ;; bib-etags - Refreshes (or builds) the TAGS files for
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
76 ;; multi-file documents.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
77 ;; bib-create-auto-file - Used in bibtex-mode to create cite key
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
78 ;; completion .el file for auctex.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
79 ;; bib-highlight-mouse - Highlight \cite, \ref and \label commands in
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
80 ;; green when the mouse is over them.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
81
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
82 ;; About Cite Commands and related functions:
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
83 ;; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
84 ;; Various flavors of \cite commands are allowed (as long as they contain
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
85 ;; the word `cite') and they may optionally have bracketed [] options.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
86 ;; Bibtex Cross-references are displayed, and @string abbreviations are
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
87 ;; substituted or included.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
88 ;;
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
89 ;; The \cite text is found (by emacs) in the bibtex source files listed in the
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
90 ;; \bibliography command. The BiBTeX files can be located in a search path
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
91 ;; defined by an environment variable (typically BIBINPUTS, but you can change
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
92 ;; this).
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
93 ;;
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
94 ;; All citations used in a buffer can also be listed in a new bibtex buffer by
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
95 ;; using bib-make-bibliography. This is useful to make a bibtex file for a
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
96 ;; document from a large bibtex database. In this case, cross-references are
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
97 ;; included, as well as the @string commands used. The @string abbreviations
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
98 ;; are not substituted.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
99 ;;
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
100 ;; The bibtex files can also be searched for entries matching a regular
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
101 ;; expression using bib-apropos.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
102
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
103 ;; Usage instructions:
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
104 ;; ~~~~~~~~~~~~~~~~~~
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
105 ;; bib-display Bound to Mouse-3 when specially highlighted.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
106 ;; In Hyperbole, bound to the Assist key.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
107 ;; Bound to `\C-c b d'
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
108 ;;
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
109 ;; bib-display will show the bibtex entry or the corresponding label or
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
110 ;; ref commands from anywhere within a document.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
111 ;; With cursor on the \cite command itslef
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
112 ;; -> display all citations of the cite command from the BiBTeX source.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
113 ;; With cursor on a particular cite key within the brackets
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
114 ;; -> display that citation's text from the BiBTeX source file(s).
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
115 ;;
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
116 ;; Example:
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
117 ;;
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
118 ;; \cite{Wadhams81,Bourke.et.al87,SchneiderBudeus94}
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
119 ;; ^Cursor -> Display-all-citations ^Cursor -> Display-this-citation
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
120 ;;
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
121 ;; With cursor on a \label command
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
122 ;; -> Display first matching \ref command in the document
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
123 ;; With cursor on a \ref command
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
124 ;; -> Display environment associated with the matching \label command.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
125 ;;
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
126 ;; Finding a ref or label within a multi-file document requires a TAGS file,
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
127 ;; which is automatically generated for you. This enables you to then use
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
128 ;; any tags related emacs features.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
129 ;;
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
130 ;; bib-find Bound to Mouse-2 when specially highlighted.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
131 ;; In Hyperbole, bound to the Action key.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
132 ;; Bound to `\C-c b f'
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
133 ;;
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
134 ;; bib-find will select the buffer and move point to the BiBTeX source file
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
135 ;; at the proper citation for a cite command, or move point to anywhere
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
136 ;; within a document for a label or ref command. The ref chosen is the
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
137 ;; first occurrance within a document (using a TAGS file). If point is
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
138 ;; moved within the same buffer, mark is set before the move and a message
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
139 ;; stating so is given. If point is moved to another file, this is done in
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
140 ;; a new window using tag functions. Within a plain file, the search
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
141 ;; pattern is set for another similar \ref command (since TAGS file are not
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
142 ;; used). Within a multi-file document the following tag functions are
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
143 ;; appropriately setup:
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
144 ;;
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
145 ;; C-u M-. Find next alternate definition of last tag specified.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
146 ;;
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
147 ;; C-u - M-. Go back to previous tag found.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
148 ;;
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
149 ;;
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
150 ;; For multi-file documents, you must be using auctex (so that bib-cite can
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
151 ;; find the master file) and all \input and \include commands must be first
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
152 ;; on a line (not preceeded by any non-white text).
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
153 ;;
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
154 ;; imenu support (Suggested key binding: Shift-Mouse-3)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
155 ;;
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
156 ;; If you want to bind imenu globally to Shift-Mouse-3, do so by adding the
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
157 ;; following to your ~/.emacs
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
158 ;;
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
159 ;; (require 'imenu)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
160 ;; (define-key global-map [S-mouse-3] 'imenu)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
161 ;;
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
162 ;; Another good place to define Imenu is in the menu-bar. You can try this
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
163 ;; manually with
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
164 ;;
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
165 ;; M-x imenu-add-to-menubar RET Imenu RET
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
166 ;;
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
167 ;; or in a hook such as:
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
168 ;;
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
169 ;; (add-hook 'LaTeX-mode-hook '(lambda () (imenu-add-to-menubar "Imenu")))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
170 ;;
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
171 ;; The imenu facility (distributed with emacs) is supported by bib-cite to
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
172 ;; move point to a LaTeX section (or chapter) division or to a label
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
173 ;; declaration. When editing a multi-file document, all such declarations
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
174 ;; within the document are displayed in the menu (again using a TAGS file).
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
175 ;; If you do not want to load imenu.el and use these features, set
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
176 ;; bib-use-imenu to nil. (This feature is disabled in xemacs because I'm
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
177 ;; told it doesn't have imenu).
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
178 ;;
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
179 ;; bib-make-bibliography: Bound to `\C-c b m'
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
180 ;;
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
181 ;; Extract citations used in the current document from the \bibliography{}
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
182 ;; file(s). Put them into a new suitably-named buffer. In a auctex
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
183 ;; multi-file document, the .aux files are used to find the cite keys (for
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
184 ;; speed). You will be warned if these are out of date.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
185 ;;
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
186 ;; This buffer is not saved to a file. It is your job to save it to whatever
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
187 ;; name you wish. Note that auctex has a unique name space for LaTeX and
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
188 ;; BiBTeX files, so you should *not* name the bib file associated with
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
189 ;; example.tex as example.bib! Rather, name it something like
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
190 ;; example-bib.bib.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
191 ;;
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
192 ;; bib-apropos: Bound to `\C-c b a'
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
193 ;;
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
194 ;; Searches the \bibliography{} file(s) for entries containing a keyword and
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
195 ;; display them in the *help* buffer. You can trim down your search by using
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
196 ;; bib-apropos in the *Help* buffer after the first invocation. the current
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
197 ;; buffer is also searched for keyword matches if it is in bibtex-mode.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
198 ;;
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
199 ;; It doesn't display cross-references nor does it substitute or display
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
200 ;; @string commands used. It could easily be added, but it's faster this
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
201 ;; way. Drop me a line if this would be a useful addition.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
202 ;;
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
203 ;; If you find yourself entering a cite command and have forgotten which key
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
204 ;; you want, but have entered a few initial characters as in `\cite{Gal',
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
205 ;; then invoke bib-apropos. It will take that string (in this case `Gal') as
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
206 ;; an initial response to the apropos prompt. You are free to edit it, or
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
207 ;; simply press carriage return.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
208 ;;
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
209 ;; bib-etags: Bound to `\C-c b e'
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
210 ;;
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
211 ;; Creates a TAGS file for auc-tex's multi-file document (or refreshes it).
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
212 ;; This is used by bib-find when editing multi-file documents. The TAGS file
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
213 ;; is created automatically, but it isn't refreshed automatically. So if
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
214 ;; bib-find can't find something, try running bib-etags again. The *rescan*
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
215 ;; in imenu also calls bib-etags to refresh the TAGS file, so that is another
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
216 ;; way to generate it.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
217 ;;
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
218 ;; bib-create-auto-file:
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
219 ;;
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
220 ;; Use this when editing a BiBTeX buffer to generate the auc-tex .el file
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
221 ;; which tell emacs about all its cite keys. I've added this command to
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
222 ;; bibtex-mode pull-down menu.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
223 ;;
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
224 ;; bib-highlight-mouse: Bound to `\C-c b h'
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
225 ;;
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
226 ;; Highlights \cite, \ref and \label commands in green when the mouse is over
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
227 ;; them. By default, a call to this function is added to LaTeX-mode-hook
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
228 ;; (via bib-cite-initialize) if you set bib-highlight-mouse-t to true. But
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
229 ;; you may want to run this command to refresh the highlighting for newly
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
230 ;; edited text.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
231
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
232 ;; Installation instructions:
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
233 ;; ~~~~~~~~~~~~~~~~~~~~~~~~~
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
234 ;; If you use a menued environment (e.g. X Window System), bib-cite must be
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
235 ;; loaded *after* your LaTeX-mode menus are created in order to bypass an
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
236 ;; annoying bug in bib-cite. This is done by loading bib-cite via a
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
237 ;; mode-hook:
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
238 ;; - If you are using AUC-TeX (http://sunsite.auc.dk/auctex/), add the
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
239 ;; following lines to your ~/.emacs file:
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
240 ;;
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
241 ;; (defun my-LaTeX-mode-hook ()
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
242 ;; (require 'bib-cite))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
243 ;; (add-hook 'LaTeX-mode-hook 'my-LaTeX-mode-hook)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
244 ;;
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
245 ;; - If you are using Emacs' regulare LaTeX-mode, use instead:
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
246 ;;
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
247 ;; (defun my-LaTeX-mode-hook ()
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
248 ;; (require 'bib-cite))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
249 ;; (add-hook 'latex-mode-hook 'my-TeX-mode-hook)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
250 ;;
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
251 ;; If you do not use a windowed environment, all you need to do is add this
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
252 ;; line to your .emacs file:
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
253 ;;
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
254 ;; (require 'bib-cite)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
255 ;;
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
256 ;; bib-cite can be used with auctex, or stand-alone. If used with auctex on a
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
257 ;; multi-file document (and auctex's parsing is used), then all \bibliography
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
258 ;; commands in the document will be found and used.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
259 ;; ---
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
260 ;; The following variable can be unset (like shown) to tell bib-cite to
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
261 ;; not give advice messages about which commands to use to find the next
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
262 ;; occurrence of a search:
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
263 ;;
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
264 ;; (setq bib-novice nil)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
265 ;; ---
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
266 ;; By default, bib-cite adds a menu-bar pull-down menu under a separate name.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
267 ;; Under emacs' tex-mode and auctex's latex-mode, it can be placed within
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
268 ;; the existing menu if you set the following:
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
269 ;;
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
270 ;; (setq bib-cite-put-menu-separately nil)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
271 ;;
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
272 ;; This variable has no effect under XEmacs. Should I change this?
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
273 ;; ---
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
274 ;; The imenu features will be disabled if you set this variable to nil
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
275 ;;
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
276 ;; (setq bib-use-imenu nil)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
277 ;;
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
278 ;; This variable has no effect under XEmacs.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
279 ;; ---
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
280 ;; If you use hilit19 (or hl319), then bib-display will use it to highlight
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
281 ;; the display unless you turn this off with:
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
282 ;;
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
283 ;; (setq bib-hilit-if-available nil)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
284 ;;
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
285 ;; If you don't use hilit19, or if this is nil, and if you use font-lock
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
286 ;; then it will be used by bib-display.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
287 ;; ---
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
288 ;; The variable bib-switch-to-buffer-function sets the function used to
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
289 ;; select buffers (if they differ from the original) in bib-cite commands
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
290 ;; bib-make-bibliography, bib-display, bib-find
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
291 ;; You may use `switch-to-buffer' `switch-to-buffer-other-window' or
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
292 ;; `switch-to-buffer-other-frame'.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
293 ;; ---
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
294 ;; The following variable determines whether we will attempt to highlight
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
295 ;; citation, ref and label commands in green when they are under the
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
296 ;; mouse. When highlighted, the mouse keys work to call bib-display
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
297 ;; (bound to [mouse-3]) and bib-find (bound to [mouse-2]). If you use a
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
298 ;; mode other than LaTeX-mode, you'll want to call bib-highlight-mouse with
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
299 ;; a hook (See how we do this at the end of this file with the add-hook
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
300 ;; command).
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
301 ;;
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
302 ;; (setq bib-highlight-mouse-t nil)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
303 ;; ---
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
304 ;; If you use DOS or OS/2, you may have to set the following variable:
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
305 ;;
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
306 ;; (setq bib-dos-or-os2-variable t)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
307 ;;
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
308 ;; if bib-cite.el fails to determine that you are using DOS or OS/2.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
309 ;; Try `C-h v bib-dos-or-os2-variable' to see if it needs to be set manually.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
310 ;; ---
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
311 ;; bib-cite needs to call the etags program with its output file option
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
312 ;; and also with the append option (usually -a).
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
313 ;; I figured that DOS and OS/2 would use "etags /o=" instead of the unix
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
314 ;; variant "etags -o ", but users have reported differently. So while the
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
315 ;; unix notation is used here, you can reset it if you need to like so:
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
316 ;;
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
317 ;; (setq bib-etags-command "etags /o=")
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
318 ;; (setq bib-etags-append-command "etags /a /o=")
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
319 ;; ---
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
320 ;; For multi-file documents, a TAGS file is generated by etags.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
321 ;; By default, its name is TAGS. You can change this like so:
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
322 ;;
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
323 ;; (setq bib-etags-filename "TAGSLaTeX")
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
324 ;; ---
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
325 ;; If your environment variable to find BiBTeX files is not BIBINPUTS, then
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
326 ;; reset it with the following variable (here, assuming it's TEXBIB instead):
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
327 ;;
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
328 ;; (setq bib-bibtex-env-variable "TEXBIB")
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
329 ;;
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
330 ;; Note that any directory ending in a double slash will cause bib-cite to
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
331 ;; search recursively through subdirectories for your .bib files. This can
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
332 ;; be slow, so use this judiciously.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
333 ;; e.g. setenv BSTINPUTS .:/home/rhogee/LaTeX/bibinputs//
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
334 ;; -> all directories below /home/rhogee/LaTeX/bibinputs/ will be
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
335 ;; searched.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
336 ;; ---
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
337 ;; If you do not wish bib-display to substitute @string abbreviations,
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
338 ;; then set the following variable like so:
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
339 ;;
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
340 ;; (setq bib-substitute-string-in-display nil)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
341 ;; ---
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
342 ;; Warnings are given when @string abbreviations are not defined in your bib
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
343 ;; files. The exception is for months, usually defined in style files. If you
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
344 ;; use other definitions in styles file (e.g. journals), then you may add them
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
345 ;; to the `bib-substitute-string-in-display' list variable.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
346
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
347 ;; If you find circumstances in which this package fails, please let me know.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
348
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
349 ;; Things for me to do in later versions:
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
350 ;; - jmv@di.uminho.pt (Jose Manuel Valenca) wants:
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
351 ;; - prompt for \cite as well as \label and \ref
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
352 ;; (and use auctex's completion list)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
353 ;; - implement string concatenation, with #[ \t\n]*STRING_NAME
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
354 ;; - Create new command to substitute @string text in any bibtex buffer.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
355
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
356 ;; ----------------------------------------------------------------------------
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
357 ;;; Change log:
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
358 ;; V2.28 Jan 22 97 - Peter Galbraith (RCS V1.9)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
359 ;; - Bug in bib-create-auto-file.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
360 ;; V2.27 Dec 31 96 - Peter Galbraith (RCS V1.8)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
361 ;; - allow spaces between cite keys.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
362 ;; - Vladimir Alexiev <vladimir@cs.ualberta.ca>
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
363 ;; Allow () delimiters as well as {}.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
364 ;; Better check on bibtex-menu
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
365 ;; Erase *bibtex-bibliography* buffer.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
366 ;; V2.26 Sep 24 96 - Peter Galbraith (RCS V1.7)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
367 ;; imenu bug fix.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
368 ;; V2.25 Sep 23 96 - Anders Stenman <stenman@isy.liu.se> (RCS V1.6)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
369 ;; XEmacs bib-cite-fontify-help-as-latex bug fix.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
370 ;; V2.24 Aug 19 96 - Peter Galbraith (RCS V1.3)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
371 ;; XEmacs bug fix, minor defvars - Vladimir Alexiev <vladimir@cs.ualberta.ca>
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
372 ;; V2.23 Aug 13 96 - Peter Galbraith (RCS V1.2)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
373 ;; XEmacs - Add bib-cite entries to bibtex-mode popup menu.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
374 ;; V2.22 July 22 96 - Peter Galbraith (RCS V1.1)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
375 ;; local-map has `m' for bib-make-bibliography instead of `b'
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
376 ;; set-buffer-menubar in XEmacs so that menu disappears after use.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
377 ;; V2.21 July 12 96 - Peter Galbraith
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
378 ;; Define `\C-c b' keymap for both plain tex and auctex, in XEmacs and emacs.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
379 ;; Separate menu-bar menu in gnu emacs.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
380 ;; font-lock support for bib-display'ed citations (bibtex fontification)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
381 ;; and for matching \ref{} and \labels (latex fontification).
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
382 ;; buffer-substring-no-properties in bib-apropos
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
383 ;; (bug in completing-read with mouse faces)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
384 ;; imenu-sort-function made local and nil.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
385 ;; imenu--LaTeX-name-and-position fixed for section name containing "\"
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
386 ;; Various other things... (whitespace within label strings, etc...)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
387 ;; V2.20 June 25 96 - Peter Galbraith
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
388 ;; imenu fixed for emacs-19.31.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
389 ;; V2.19 May 13 96
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
390 ;; PSG:
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
391 ;; - @string substitution fixed; bib-edit-citation fixed when buffer exists;
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
392 ;; Christoph Wedler <wedler@fmi.uni-passau.de>:
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
393 ;; - Added bib-switch-to-buffer-function
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
394 ;; - (setq tags-always-exact nil) for xemacs
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
395 ;; - removed eval-after-load foe xemacs
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
396 ;; V2.18 May 06 96 - PSG
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
397 ;; New eval-after-load from Fred Devernay <Frederic.Devernay@sophia.inria.fr>
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
398 ;; V2.17 May 03 96 - PSG
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
399 ;; Fixed bug introduced in V2.16, reported by Dennis Dams <wsindd@win.tue.nl>
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
400 ;; V2.16 May 02 96 - Vladimir Alexiev <vladimir@cs.ualberta.ca>
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
401 ;; - somewhat compatible with Hyperbole by binding bib-find and bib-display to
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
402 ;; the Action and Assist keys inside the bib-highlight-mouse-keymap.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
403 ;; - makes more liberal provisions for users with a tty.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
404 ;; V2.15 Apr 09 96 -
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
405 ;; - fix "Buffer read-only" error caused by mouse-face text properties
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
406 ;; patch by Piet van Oostrum <piet@cs.ruu.nl>
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
407 ;; - Use tmm non-X menu, patch by Vladimir Alexiev <vladimir@cs.ualberta.ca>
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
408 ;; - input{file.txt} would not work.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
409 ;; bug report: David Kastrup <dak@pool.informatik.rwth-aachen.de>
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
410 ;; V2.14 Feb 26 96 - PSG - define eval-after-load for xemacs
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
411 ;; Frederic Devernay's <Frederic.Devernay@sophia.inria.fr> suggestion.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
412 ;; V2.13 Feb 08 96 - Peter Galbraith - Fixed recursive use of bib-apropos.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
413 ;; V2.12 Jan 19 96 - Peter Galbraith
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
414 ;; emacs-19.30's [down-mouse-1] is defined (rather than [mouse-1]), so
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
415 ;; bib-highlight-mouse-keymap now has [down-mouse-1] defined to override it.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
416 ;; V2.11 Nov 21 95 - Peter Galbraith
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
417 ;; - Fixed bib-create-auto-file when bib file loaded before LaTeX file.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
418 ;; - Michal Mnuk's better imenu labels menu <Michal.Mnuk@risc.uni-linz.ac.at>
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
419 ;; - [mouse-1] and [mouse-2] key defs for highlighted regions.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
420 ;; - Improve X menus.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
421 ;; - Skip over style files in bib-document-TeX-files.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
422 ;; - Add menus and mouse highlighting for xemacs
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
423 ;; Anders Stenman <stenman@isy.liu.se> Dima Barsky <D.Barsky@ee.surrey.ac.uk>
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
424 ;; - Check bib-use-imenu before calling LaTeX-hook-setq-imenu.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
425 ;; From: Kurt Hornik <hornik@ci.tuwien.ac.at>
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
426 ;; - Remove mouse face properties before inserting new ones.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
427 ;; From: Peter Whaite <peta@Whippet.McRCIM.McGill.EDU>
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
428 ;; V2.10 Aug 17 95 - Peter Galbraith - fatal bugs in bib-make-bibliography.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
429 ;; V2.09 Jul 19 95 - Peter Galbraith
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
430 ;; - Had introduced bug in search-directory-tree. synced with ff-paths.el.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
431 ;; V2.08 Jul 13 95 - Peter Galbraith
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
432 ;; Fred Douglis <douglis@research.att.com> says etags should be required
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
433 ;; V2.07 Jul 04 95 - Peter Galbraith
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
434 ;; - Minor changes with filename manipulations (careful with DOS...)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
435 ;; - Problem if auc-tex not already loaded -> LaTeX-mode-map
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
436 ;; V2.06 Jul 03 95 - Peter Galbraith - Added recursion through BIBINPUTS path.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
437 ;; V2.05 Jun 22 95 - Peter Galbraith Bug: Hanno Wirth <wirth@jake.igd.fhg.de>
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
438 ;; bib-get-citations would truncate @String{KEY ="J. {\"u} Res."}
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
439 ;; V2.04 Jun 19 95 - Peter Galbraith -
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
440 ;; - use bibtex-mode syntax table in bib buffer, else bib-apropos truncates
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
441 ;; an article if it contains an unbalanced closing parenthesis.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
442 ;; - bib-highlight-mouse would mark a buffer modified
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
443 ;; V2.03 May 16 95 - Peter Galbraith -
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
444 ;; auc-tec menu compatible with old "AUC TeX" pull-down name
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
445 ;; V2.02 May 10 95 - Peter Galbraith -
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
446 ;; bug report by Bodo Huckestein <bh@thp.Uni-Koeln.DE> (getenv env) under DOS
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
447 ;; V2.01 Mar 27 95 - Peter Galbraith - No imenu on xemacs; check BIBINPUT also
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
448 ;; V2.00 Mar 27 95 - Peter Galbraith
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
449 ;; - bib-find and bib-display replace bib-edit-citation and
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
450 ;; bib-display-citation
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
451 ;; - bib-apropos now take initial guess from start of cite argument at point.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
452 ;; - Multi-file support for bib-make-bibliography using .aux files.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
453 ;; - \label and \ref functionality for bib-find and bib-display:
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
454 ;; - \label may appear within an \begin\end or to label a (sub-)section.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
455 ;; - Cursor on \label, goto first \ref, set next i-search to pattern.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
456 ;; - Cursor on \ref, goto \label or display it's environment or section.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
457 ;; - Works on hidden code!
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
458 ;; V1.08 Jan 16 95 - Peter Galbraith
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
459 ;; bib-apropos can be used within *Help* buffer to trim a search.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
460 ;; V1.07 Dec 13 94 - Peter Galbraith
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
461 ;; - Fixed: multi-line @string commands in non-inserted display.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
462 ;; - Fixed: quoted \ character in @string commands.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
463 ;; - BiBTeX comments should not affect bib-cite
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
464 ;; - Fixed bib-apropos (from Christoph Wedler <wedler@fmi.uni-passau.de>)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
465 ;; Faster now, and avoids infinite loops.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
466 ;; - Added bib-edit-citation to edit a bibtex files about current citation.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
467 ;; - Allow space and newlines between citations: \cite{ entry1, entry2}
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
468 ;; - Added bib-substitute-string-in-display, bib-string-ignored-warning
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
469 ;; and bib-string-regexp.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
470 ;; - bib-display-citation (from Markus Stricker <stricki@vision.ee.ethz.ch>)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
471 ;; Could not find entry with trailing spaces
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
472 ;; V1.06 Nov 20 94 - Peter Galbraith
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
473 ;; - Fixed bib-apropos for:
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
474 ;; hilighting without invoking bibtex mode.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
475 ;; display message when no matches found.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
476 ;; would search only last bib file listed (forgot to `goto-char 1')
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
477 ;; - Fixed bib-make-bibliography that would only see first citation in a
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
478 ;; multi-key \cite command (found by Michail Rozman <roz@physik.uni-ulm.de>
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
479 ;; - bib-make-bibliography didn't see \cite[A-Z]* commands.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
480 ;; Found by Richard Stanton <stanton@haas.berkeley.edu>
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
481 ;; **************************************************
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
482 ;; - * Completely rewritten code to support crossrefs *
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
483 ;; **************************************************
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
484 ;; - autodetection of OS/2 and DOS for bib-dos-or-os2-variable
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
485 ;; - Created bib-display-citation-mouse
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
486 ;; - bib-apropos works in bibtex-mode on the current buffer
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
487 ;; - bibtex entry may have comma on next line (!)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
488 ;; @ARTICLE{Kiryati-91
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
489 ;; , YEAR = {1991 }
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
490 ;; ...
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
491 ;; V1.05 Nov 02 94 - Peter Galbraith
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
492 ;; - bug fix by rossmann@TI.Uni-Trier.DE (Jan Rossmann)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
493 ;; for (boundp 'TeX-check-path) instead of fboundp. Thanks!
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
494 ;; - Translate environment variable set by bib-bibtex-env-variable.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
495 ;; (suggested by Richard Stanton <stanton@haas.berkeley.edu>)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
496 ;; - add bib-dos-or-os2-variable to set environment variable path separator
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
497 ;; - Add key-defs for any tex-mode and auc-tex menu-bar entries.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
498 ;; [in auc-tec TeX-mode-map is common to both TeX and LaTeX at startup
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
499 ;; (but TeX-mode-map is only copied to LaTeX-mode-map at initilisation)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
500 ;; in plain emacs, use tex-mode-map for both TeX and LaTeX.]
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
501 ;; - Add key def for bibtex-mode to create auc-tex's parsing file.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
502 ;; - Fix bugs found by <thompson@loon.econ.wisc.edu>
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
503 ;; - fix bib-get-citation for options
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
504 ;; - fix bib-get-citation for commas preceeded citation command
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
505 ;; - better regexp for citations and their keys.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
506 ;; - Added @string support for any entry (not just journal entries).
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
507 ;; (I had to disallow numbers in @string keys because of years.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
508 ;; Is that ok?)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
509 ;; - added bib-apropos
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
510 ;; V1.04 Oct 24 94 - Peter Galbraith
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
511 ;; - Don't require dired-aux, rather define the function we need from it.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
512 ;; - Regexp-quote the re-search for keys.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
513 ;; - Name the bib-make-bibliography buffer diffently than LaTeX buffer
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
514 ;; because auc-tex's parsing gets confused if same name base is used.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
515 ;; V1.03 Oct 24 94 - Peter Galbraith - require dired-aux for dired-split
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
516 ;; V1.02 Oct 19 94 - Peter Galbraith
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
517 ;; - If using auc-tex with parsing activated, use auc-tex's functions
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
518 ;; to find all \bibliography files in a multi-file document.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
519 ;; - Find bib files in pwd, BIBINPUTS environment variable path and
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
520 ;; TeX-check-path elisp variable path.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
521 ;; - Have the parser ignore \bibliography that is on a commented `%' line.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
522 ;; (patched by Karl Eichwalder <karl@pertron.central.de>)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
523 ;; - Allow for spaces between entry type and key in bib files:
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
524 ;; (e.g @Article{ key} )
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
525 ;; (suggested by Nathan E. Doss <doss@ERC.MsState.Edu>)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
526 ;; - Allows options in \cite command (e.g. agu++ package \cite[e.g.][]{key})
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
527 ;; - Includes @String{} abbreviations for `journal' entries
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
528 ;; V1.01 July 07 94 - Peter Galbraith - \bibliography command may have list of
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
529 ;; BibTeX files. All must be readable.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
530 ;; V1.00 July 06 94 - Peter Galbraith - Created
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
531 ;; ----------------------------------------------------------------------------
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
532 ;;; Code:
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
533
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
534 ;;>>>>>>User-Modifiable variables start here:
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
535
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
536 (defvar bib-novice t
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
537 "*Give advice to novice users about what commands to use next.")
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
538
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
539 (defvar bib-use-imenu (not (string-match "XEmacs\\|Lucid" emacs-version))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
540 "*Use imenu package for LaTeX modes (coded in bib-cite).")
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
541
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
542 (defvar bib-hilit-if-available t
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
543 "*Use hilit19 or hl319 to hilit bib-display if available")
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
544
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
545 (defvar bib-switch-to-buffer-function 'switch-to-buffer
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
546 "*Function used to select buffers if they differ from the original.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
547 You may use `switch-to-buffer' `switch-to-buffer-other-window' or
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
548 `switch-to-buffer-other-frame'.")
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
549
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
550 (defvar bib-highlight-mouse-t t
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
551 "*Call bib-highlight-mouse from LaTeX-mode-hook to add green highlight.")
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
552
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
553 (defvar bib-bibtex-env-variable "BIBINPUTS"
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
554 "*Environment variable setting the path where BiBTeX input files are found.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
555 BiBTeX 0.99b manual says this should be TEXBIB.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
556 Another version says it should BSTINPUTS. I don't know anymore!
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
557
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
558 The colon character (:) is the default path separator in unix, but you may
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
559 use semi-colon (;) for DOS or OS/2 if you set bib-dos-or-os2-variable to `t'.")
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
560
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
561 (defvar bib-dos-or-os2-variable (or (equal 'emx system-type)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
562 (equal 'ms-dos system-type))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
563 ;; Under OS/2 system-type equals emx
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
564 ;; Under DOS system-type equals ms-dos
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
565 "*`t' if you use DOS or OS/2 for bib-make-bibliography/bib-display
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
566
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
567 It tells bib-make-bibliography and bib-display to translate
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
568 the BIBINPUTS environment variable using the \";\" character as
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
569 a path separator and to translate DOS' backslash to slash.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
570
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
571 e.g. Use a path like \"c:\\emtex\\bibinput;c:\\latex\\bibinput\"
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
572
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
573 (You can change the environment variable which is searched by setting the
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
574 elisp variable bib-bibtex-env-variable)")
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
575
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
576 (defvar bib-etags-command "etags -o "
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
577 "*Variable for the etags command and its output option.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
578 In unix, this is usually \"etags -o \"
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
579 In DOS and OS/2, this *may* be \"etags /o=\" If so, set it this variable.")
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
580
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
581 (defvar bib-etags-append-command "etags -a -o "
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
582 "*Variable for the etags command and its append and output option.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
583 In unix, this is usually \"etags -a -o \"
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
584 In DOS and OS/2, this *may* be \"etags /a /o=\" If so, set it this variable.")
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
585
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
586 (defvar bib-etags-filename "TAGS"
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
587 "*Variable for the filename generated by etags, by defaults this TAGS
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
588 but you may want to change this to something like TAGSLaTeX such that it can
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
589 coexist with some other tags file in your master file directory.")
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
590
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
591 (defvar bib-substitute-string-in-display t
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
592 "*Determines if bib-display will substitute @string definitions.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
593 If t, then the @string text is substituted.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
594 If nil, the text is not substituted but the @string entry is included.")
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
595
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
596 (defvar bib-string-ignored-warning
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
597 '("jan" "feb" "mar" "apr" "may" "jun" "jul" "aug" "sep" "sept" "oct" "nov"
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
598 "dec")
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
599 "*List of @string abbreviations for which a warning is given if not defined.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
600 These are usually month abbreviations (or journals) defined in a style file.")
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
601
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
602 ;;<<<<<<User-Modifiable variables end here.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
603
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
604 ;; Following from bibtex.el
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
605 (defvar
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
606 bib-cite-bibtex-font-lock-keywords
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
607 '(("^\\( \\|\t\\)*\\(@[A-Za-z]+\\)[ \t]*[({]\\([][A-Za-z0-9.:;?!`'()/*@_+=|<>-]+\\)?"
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
608 (2 font-lock-function-name-face)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
609 (3 font-lock-reference-face nil t))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
610 ;; reference type and reference label
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
611 ("^[ \t]*\\(OPT[^\"#%'(),={} \t\n0-9][^\"#%'(),={} \t\n]*\\)[ \t]*="
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
612 1 font-lock-comment-face)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
613 ;; optional field names (treated as comments)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
614 ("^[ \t]*\\([^\"#%'(),={} \t\n0-9][^\"#%'(),={} \t\n]*\\)[ \t]*="
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
615 1 font-lock-variable-name-face)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
616 ;; field names
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
617 "Default expressions to fontify in BibTeX mode."))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
618
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
619 (defvar bib-cite-bibtex-mode-syntax-table
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
620 (let ((st (make-syntax-table)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
621 ;; [alarson:19920214.1004CST] make double quote a string quote
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
622 (modify-syntax-entry ?\" "\"" st)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
623 (modify-syntax-entry ?$ "$$ " st)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
624 (modify-syntax-entry ?% "< " st)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
625 (modify-syntax-entry ?' "w " st)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
626 (modify-syntax-entry ?@ "w " st)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
627 (modify-syntax-entry ?\\ "\\" st)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
628 (modify-syntax-entry ?\f "> " st)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
629 (modify-syntax-entry ?\n "> " st)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
630 (modify-syntax-entry ?~ " " st)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
631 st))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
632 ;; Code from bibtex.el ends
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
633
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
634 ;; @string starts with a letter and does not contain any of ""#%'(),={}
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
635 ;; Here we do not check that the field contains only one string field and
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
636 ;; nothing else.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
637 (defvar bib-string-regexp
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
638 "^[, \t]*[a-zA-Z]+[ \t]*=[ \t]*\\([a-zA-Z][^#%'(),={}\" \t\n]*\\)"
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
639 "Regular expression for field containing a @string")
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
640
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
641 (defvar bib-ext-list nil
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
642 "xemacs buffer-local list of bib-cite extents.")
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
643 (make-variable-buffer-local 'bib-ext-list)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
644
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
645 (defun bib-display ()
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
646 "Display BibTeX citation or matching \\ref or \\label command under point.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
647
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
648 If text under cursor is a \\cite command, then display its BibTeX info from
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
649 \\bibliography input file.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
650 Example with cursor located over cite command or arguments:
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
651 \cite{Wadhams81,Bourke.et.al87,SchneiderBudeus94}
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
652 ^Display-all-citations ^Display-this-citation
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
653
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
654 If text under cursor is a \\ref command, then display environment associated
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
655 with its matching \\label command.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
656
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
657 If text under cursor is a \\label command, then display the text around
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
658 the first matching \\ref command.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
659
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
660 The user is prompted for a \\label or \\ref is nothing suitable is found under
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
661 the cursor. The first prompt is for a label. If you answer with an empty
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
662 string, a second prompt for a ref will be given.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
663
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
664 A TAGS file is created and used for multi-file documents under auctex."
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
665 (interactive)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
666 (let ((cite))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
667 (save-excursion
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
668 (if (not (looking-at "\\\\"))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
669 (re-search-backward "[\\]" nil t))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
670 (if (looking-at "\\\\[a-zA-Z]*cite")
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
671 (setq cite t)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
672 (if cite
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
673 (bib-display-citation)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
674 (bib-display-label))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
675
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
676 (defun bib-find ()
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
677 "Edit BibTeX citation or find matching \\ref or \\label command under point.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
678
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
679 For multi-entry cite commands, the cursor should be on the actual cite key
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
680 desired (otherwise a random entry will be selected).
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
681 e.g.: \cite{Wadhams81,Bourke.et.al87,SchneiderBudeus94}
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
682 ^Display-this-citation
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
683
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
684 If text under cursor is a \\ref command, then point is moved to its matching
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
685 \\label command.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
686
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
687 If text under cursor is a \\label command, then point is moved to the first
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
688 matching \\ref command.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
689
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
690 The user is prompted for a \\label or \\ref is nothing suitable is found under
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
691 the cursor. The first prompt is for a label. If you answer with an empty
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
692 string, a second prompt for a ref will be given.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
693
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
694 A TAGS file is created and used for multi-file documents under auctex."
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
695 (interactive)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
696 (let ((cite))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
697 (save-excursion
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
698 (if (not (looking-at "\\\\"))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
699 (re-search-backward "[ \\\n]" nil t))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
700 (if (looking-at "\\\\[a-zA-Z]*cite")
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
701 (setq cite t)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
702 (if cite
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
703 (bib-edit-citation)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
704 (bib-find-label))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
705
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
706 (defun bib-display-mouse (EVENT)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
707 "Display BibTeX citation or matching \\ref or \\label command under mouse.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
708 See bib-display."
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
709 (interactive "e")
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
710 (mouse-set-point EVENT)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
711 (bib-display))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
712
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
713 (defun bib-find-mouse (EVENT)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
714 "Edit BibTeX citation or find matching \\ref or \\label command under mouse.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
715 See bib-find."
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
716 (interactive "e")
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
717 (mouse-set-point EVENT)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
718 (bib-find))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
719
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
720 (defun bib-apropos ()
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
721 "Display BibTeX entries containing a keyword from bibliography file.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
722 The files specified in the \\bibliography command are searched unless
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
723 the current buffer is in bibtex-mode or is the Help buffer. In those
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
724 cases, *it* is searched. This allows you to trim down a search further
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
725 by using bib-apropos sequentially."
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
726 ;;(interactive "sBibTeX apropos: ")
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
727 (interactive)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
728 (let* ((keylist (and (boundp 'TeX-auto-update) ;Avoid error in FRAMEPOP
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
729 (fboundp 'LaTeX-bibitem-list) ;Use this if using auctex
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
730 (LaTeX-bibitem-list)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
731 (keyword (bib-apropos-keyword-at-point))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
732 (keyword (completing-read "BiBTeX apropos: " keylist nil nil keyword))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
733 (the-text)(key-point)(start-point)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
734 (new-buffer-f (and (not (string-match "^bib" mode-name))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
735 (not (string-equal "*Help*" (buffer-name)))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
736 (bib-buffer (or (and new-buffer-f (bib-get-bibliography nil))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
737 (current-buffer))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
738 (save-excursion
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
739 (set-buffer bib-buffer)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
740 (goto-char (point-min))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
741 (while (and (re-search-forward "^[ \t]*@" nil t)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
742 (re-search-forward keyword nil t))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
743 (setq key-point (point)) ;To make sure this is within entry
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
744 (re-search-backward "^[ \t]*@" nil t)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
745 (setq start-point (point))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
746 (forward-list 1)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
747 (if (< (point) key-point) ;And this is that test...
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
748 (goto-char key-point) ;Not within entry, skip it.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
749 (setq the-text
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
750 (cons (concat (buffer-substring start-point (point)) "\n")
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
751 the-text))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
752 (if (not the-text)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
753 (message "Sorry, no matches found.")
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
754 (with-output-to-temp-buffer "*Help*"
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
755 (mapcar 'princ (nreverse the-text)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
756 (if bib-novice
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
757 (message
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
758 (substitute-command-keys
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
759 (concat "Use \\[bib-apropos] again in the *help* buffer"
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
760 " to trim the search"))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
761 (cond
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
762 ((and bib-hilit-if-available
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
763 (fboundp 'hilit-highlight-region))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
764 (set-buffer "*Help*")
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
765 (hilit-highlight-region (point-min) (point-max) 'bibtex-mode t))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
766 ;; font-lock?
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
767 ((featurep 'font-lock)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
768 (set-buffer "*Help*")
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
769 (set (make-local-variable 'font-lock-defaults)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
770 '(bib-cite-bibtex-font-lock-keywords
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
771 nil t ((?$ . "\"")(?\" . "."))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
772 (font-lock-fontify-buffer))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
773 (if new-buffer-f
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
774 (kill-buffer bib-buffer)))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
775
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
776 (defvar bib-document-citekeys-obarray-warnings nil
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
777 "bib-cite internal variable")
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
778
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
779 (defun bib-make-bibliography ()
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
780 "Extract citations used in the current document from \bibliography{} file(s).
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
781 Put them into a buffer named after the current buffer, with extension .bib.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
782
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
783 In an auc-tex multi-file document, parsing must be on and the citation keys
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
784 are extracted from the .aux files.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
785
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
786 In a plain LaTeX buffer (not multi-file), the cite keys are extracted from
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
787 the text itself. Therefore the text need not have been previously processed
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
788 by LaTeX.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
789
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
790 This function is useful when you want to share a LaTeX file, and therefore want
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
791 to create a bibtex file containing only the references used in the document."
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
792 (interactive)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
793 (let* ((the-keys-obarray (or (bib-document-citekeys-obarray)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
794 (bib-buffer-citekeys-obarray)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
795 ;1st in case of error
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
796 (new-buffer
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
797 (create-file-buffer
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
798 (concat (substring (buffer-name) 0
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
799 (or (string-match "\\." (buffer-name))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
800 (length (buffer-name))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
801 "-bib.bib")))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
802 (bib-buffer (bib-get-bibliography nil))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
803 (the-warnings (bib-get-citations the-keys-obarray
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
804 bib-buffer
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
805 new-buffer
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
806 nil)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
807 (kill-buffer bib-buffer)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
808 ;;; (switch-to-buffer new-buffer)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
809 (funcall bib-switch-to-buffer-function new-buffer)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
810 (bibtex-mode)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
811 (cond
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
812 ((and bib-hilit-if-available
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
813 (fboundp 'hilit-highlight-region))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
814 (hilit-highlight-buffer t))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
815 ((featurep 'font-lock) ;Perhaps let the user's setup determine
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
816 (font-lock-fontify-buffer))) ; if font-lock fontifies?
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
817 (if (or bib-document-citekeys-obarray-warnings
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
818 the-warnings)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
819 (progn
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
820 (cond
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
821 ((and bib-document-citekeys-obarray-warnings the-warnings)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
822 (with-output-to-temp-buffer "*Help*"
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
823 (princ bib-document-citekeys-obarray-warnings the-warnings)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
824 (bib-document-citekeys-obarray-warnings
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
825 (with-output-to-temp-buffer "*Help*"
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
826 (princ bib-document-citekeys-obarray-warnings)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
827 (the-warnings
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
828 (with-output-to-temp-buffer "*Help*" (princ the-warnings))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
829 (setq bib-document-citekeys-obarray-warnings nil) ;Reset
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
830 (bib-cite-fontify-red)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
831 (if bib-novice
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
832 (message
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
833 (substitute-command-keys
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
834 "Use \\[save-buffer] to save this buffer to a file.")))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
835
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
836 (defun bib-cite-fontify-red (&optional limit)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
837 "Fontify *Help* buffer in red-bold up to optional limit"
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
838 (if (and window-system ;Not exactly correct for XEmacs
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
839 (not (facep 'red-bold)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
840 (progn
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
841 (copy-face 'bold 'red-bold)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
842 (set-face-foreground 'red-bold "red")))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
843 (save-excursion
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
844 (set-buffer "*Help*")
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
845 (let ((before-change-functions) (after-change-functions))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
846 (put-text-property (point-min)(or limit (point-max))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
847 'face 'red-bold))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
848
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
849 (defun bib-cite-fontify-help-as-latex ()
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
850 (save-excursion
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
851 (cond
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
852 ((and bib-hilit-if-available
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
853 (fboundp 'hilit-highlight-region))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
854 (set-buffer "*Help*")
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
855 (hilit-highlight-region (point-min) (point-max) 'LaTeX-mode t))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
856 ;; font-lock?
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
857 ((and (featurep 'font-lock)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
858 (featurep 'font-latex))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
859 (set-buffer "*Help*")
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
860 (setq font-lock-defaults '(font-latex-keywords-2 nil nil ((?$ . "\""))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
861 ;; Add all syntax table for `proper' fontification?
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
862 (font-lock-fontify-buffer))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
863 ((featurep 'font-lock)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
864 (make-local-variable 'font-lock-defaults)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
865 (setq font-lock-defaults '(tex-font-lock-keywords nil nil ((?$ . "\""))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
866 (set-buffer "*Help*")
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
867 (font-lock-fontify-buffer)))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
868
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
869 (defvar bib-document-TeX-files-warnings nil
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
870 "bib-cite internal variable")
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
871
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
872 (defun bib-etags (&optional masterdir)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
873 "Invoke etags on all tex files of the document, storing the TAGS file
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
874 in the master-directory. Expect errors if you use this outside of auctex
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
875 or within a plain single-file document.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
876 Also makes sure that the TAGS buffer is updated.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
877 See variables bib-etags-command and bib-etags-filename"
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
878 (interactive)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
879 (require 'etags)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
880 (let* ((the-file-list (bib-document-TeX-files))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
881 (the-file (car the-file-list))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
882 (dir (or masterdir (bib-master-directory)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
883 (the-tags-file (expand-file-name bib-etags-filename dir))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
884 (the-tags-buffer (get-file-buffer the-tags-file)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
885 ;; Create TAGS file with first TeX file (master file)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
886 (shell-command (concat bib-etags-command the-tags-file " " the-file))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
887 (setq the-file-list (cdr the-file-list))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
888 ;; Append to TAGS file for all other TeX files.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
889 (while the-file-list
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
890 (setq the-file (car the-file-list))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
891 (shell-command
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
892 (concat bib-etags-append-command the-tags-file " " the-file))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
893 (setq the-file-list (cdr the-file-list)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
894 (if the-tags-buffer ;buffer existed; we must refresh it.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
895 (save-excursion
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
896 (set-buffer the-tags-buffer)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
897 (revert-buffer t t)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
898
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
899 ;; Check value of tags-file-name against the-tags-file
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
900 (or (equal the-tags-file tags-file-name) ;make sure it's current
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
901 (visit-tags-table the-tags-file))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
902
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
903 ;(set (make-local-variable 'tags-file-name) the-tags-file))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
904 ;; above should not be needed
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
905
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
906 ;; Weird Bug:
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
907 ;; (visit-tags-table-buffer) seems to get called twice when called by
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
908 ;; find-tag on an undefined tag. The second time, it's in the TAGS
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
909 ;; buffer and returns an error because TAGS buffer does have
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
910 ;; tags-file-name set.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
911 ;; To get around this. I'm setting this variable in the TAGS buffer.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
912 ;; Skip this in XEmacs (Changed by Anders Stenman)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
913 (if (not (string-match "XEmacs\\|Lucid" emacs-version))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
914 (save-excursion
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
915 (set-buffer (get-file-buffer the-tags-file))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
916 (set (make-local-variable 'tags-file-name) the-tags-file))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
917
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
918
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
919 (if bib-document-TeX-files-warnings ;free variable loose in emacs!
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
920 (progn
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
921 (with-output-to-temp-buffer "*Help*"
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
922 (princ bib-document-TeX-files-warnings))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
923 (setq bib-document-TeX-files-warnings nil) ;Reset
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
924 (bib-cite-fontify-red)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
925 ;;;(if (and bib-hilit-if-available
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
926 ;;; (fboundp 'hilit-region-set-face))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
927 ;;; (save-excursion
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
928 ;;; (set-buffer "*Help*")
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
929 ;;; (hilit-region-set-face
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
930 ;;; 1 (point-max)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
931 ;;; (cdr (assq 'error hilit-face-translation-table)))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
932 )))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
933
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
934 (defun bib-Is-hidden ()
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
935 "Return true is current point is hidden"
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
936 (if (not selective-display)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
937 nil ;Not hidden if not using this...
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
938 (save-excursion
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
939 (if (not (re-search-backward "[\n\^M]" nil t))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
940 nil ;Play safe
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
941 (if (string-equal (buffer-substring (match-beginning 0)(match-end 0))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
942 "\n")
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
943 nil
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
944 t)))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
945
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
946 (defun bib-highlight-mouse ()
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
947 "Make that nice green highlight when the mouse is over LaTeX commands"
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
948 (interactive)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
949 ;;;Comment this out. User should be able to use bib-highlight-mouse
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
950 ;;;to try it out regardless of bib-highlight-mouse-t.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
951 ;;;Check bib-highlight-mouse-t only in automated cases.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
952 ;;;
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
953 ;;; (if (and bib-highlight-mouse-t
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
954 ;;; ;;window-system) ;Do nothing unless under X
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
955 ;;; )
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
956 ;;; *all of code was here*
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
957 ;;; )
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
958 (save-excursion
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
959 (let ((s)(e)(extent)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
960 (inhibit-read-only t)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
961 (modified (buffer-modified-p))) ;put-text-property changing this?
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
962 (goto-char (point-min))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
963 ;; * peta Wed Nov 8 16:27:29 1995 -- better remove the mouse face
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
964 ;; properties first.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
965 (if (string-match "XEmacs\\|Lucid" emacs-version)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
966 (while bib-ext-list
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
967 (delete-extent (car bib-ext-list))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
968 (setq bib-ext-list (cdr bib-ext-list)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
969 ;; Remove properties for regular emacs
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
970 ;; FIXME This detroys all mouse-faces and local-maps!
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
971 ;; FIXME Hope no other package is using them in this buffer!
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
972 (let ((before-change-functions) (after-change-functions))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
973 (remove-text-properties (point-min) (point-max)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
974 '(mouse-face t local-map t))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
975 (while
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
976 (re-search-forward
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
977 "\\\\\\(ref\\|label\\|[A-Za-z]*cite[A-Za-z]*\\(\\[.*\\]\\)?\\){[^}]*}"
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
978 nil t)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
979 (setq s (match-beginning 0))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
980 (setq e (match-end 0))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
981 (cond
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
982 ((string-match "XEmacs\\|Lucid" emacs-version)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
983 (setq extent (make-extent s e))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
984 (setq bib-ext-list (cons extent bib-ext-list))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
985 (set-extent-property extent 'highlight t)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
986 (set-extent-property extent 'start-open t)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
987 (set-extent-property extent 'keymap bib-highlight-mouse-keymap))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
988 (t
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
989 (let ((before-change-functions) (after-change-functions)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
990 ;;(this-overlay (make-overlay s e))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
991 )
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
992 ;;; Even using overlays doens't help here. If bib-highlight-mouse-keymap
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
993 ;;; does not include the AucTeX menus, then these disappear when we click
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
994 ;;; onto a \cite command. Perhaps using bib-cite as a minor mode will fix
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
995 ;;; this? For now, bib-cite must be loaded after these menus are built.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
996 ;;; It must therefore be loaded in a mode-hook.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
997 (put-text-property s e 'local-map bib-highlight-mouse-keymap)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
998 (put-text-property s e 'mouse-face 'highlight)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
999 ;;(overlay-put this-overlay 'local-map bib-highlight-mouse-keymap)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1000 ;;(overlay-put this-overlay 'mouse-face 'highlight)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1001 ))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1002 (set-buffer-modified-p modified))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1003
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1004 (defun bib-toggle-highlight ()
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1005 (interactive)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1006 (if (setq bib-highlight-mouse-t (not bib-highlight-mouse-t))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1007 (bib-highlight-mouse)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1008 (let ((modified (buffer-modified-p))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1009 (inhibit-read-only t))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1010 (cond
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1011 ((string-match "XEmacs\\|Lucid" emacs-version)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1012 (while bib-ext-list
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1013 (delete-extent (car bib-ext-list))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1014 (setq bib-ext-list (cdr bib-ext-list))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1015 (t
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1016 (let ((before-change-functions) (after-change-functions))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1017 (remove-text-properties (point-min) (point-max)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1018 '(mouse-face local-map)))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1019 (set-buffer-modified-p modified))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1020
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1021 ;;----------------------------------------------------------------------------
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1022 ;; Routines to display or edit a citation's bibliography
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1023
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1024 (defun bib-display-citation ()
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1025 "Do the displaying of cite info. Returns t if found cite key, nil otherwise.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1026 Example with cursor located over cite command or arguments:
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1027 \cite{Wadhams81,Bourke.et.al87,SchneiderBudeus94}
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1028 ^Display-all-citations ^Display-this-citation"
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1029 (save-excursion
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1030 (let* ((the-keys-obarray (bib-get-citekeys-obarray)) ;1st in case of error
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1031 (work-buffer (get-buffer-create "*bibtex-work*"))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1032 (bib-buffer (bib-get-bibliography nil))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1033 (the-warnings (bib-get-citations
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1034 the-keys-obarray
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1035 bib-buffer
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1036 work-buffer
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1037 bib-substitute-string-in-display))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1038 (the-warn-point))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1039 (if the-warnings
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1040 (progn
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1041 (set-buffer work-buffer)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1042 (goto-char 1)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1043 (insert the-warnings)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1044 (setq the-warn-point (point))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1045 (with-output-to-temp-buffer
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1046 "*Help*"
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1047 (set-buffer work-buffer)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1048 (princ (buffer-substring 1 (point-max))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1049 (cond
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1050 ((and bib-hilit-if-available
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1051 (fboundp 'hilit-highlight-region))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1052 (set-buffer "*Help*")
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1053 (hilit-highlight-region (point-min) (point-max) 'bibtex-mode t)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1054 (if the-warn-point
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1055 (hilit-region-set-face
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1056 1 the-warn-point
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1057 (cdr (assq 'error hilit-face-translation-table)))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1058 ((featurep 'font-lock)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1059 (set-buffer "*Help*")
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1060 (set (make-local-variable 'font-lock-defaults)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1061 '(bib-cite-bibtex-font-lock-keywords
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1062 nil t ((?$ . "\"")(?\" . "."))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1063 (font-lock-fontify-buffer)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1064 (if the-warn-point
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1065 (bib-cite-fontify-red the-warn-point))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1066 (kill-buffer bib-buffer)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1067 (kill-buffer work-buffer))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1068
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1069 (defun bib-edit-citation ()
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1070 "Do the edit of cite info. Returns t if found cite key, nil otherwise.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1071 Find and and put edit point in bib file associated with a BibTeX citation
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1072 under cursor from \bibliography input file.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1073 In a multi-entry cite command, the cursor should be on the actual cite key
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1074 desired (otherwise a random entry will be selected).
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1075 e.g.: \cite{Wadhams81,Bourke.et.al87,SchneiderBudeus94}
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1076 ^Display-this-citation"
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1077 (let ((the-keys-obarray (bib-get-citekeys-obarray)) ;1st in case of error
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1078 (bib-buffer (bib-get-bibliography t))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1079 (the-key)(the-file))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1080 (save-excursion
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1081 (mapatoms ;Do this for each cite-key found...
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1082 (function (lambda (cite-key)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1083 (setq the-key (symbol-name cite-key))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1084 the-keys-obarray)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1085 (set-buffer bib-buffer)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1086 (goto-char (point-min))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1087 (if (not (re-search-forward
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1088 (concat "@[^{(]+[{(][\t ]*" the-key "[ ,\n]") nil t))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1089 (progn
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1090 (kill-buffer bib-buffer)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1091 (error "Sorry, could not find bib entry for %s" the-key))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1092 (re-search-backward "%%%Filename: \\([^\n]*\\)" nil t)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1093 (setq the-file (buffer-substring (match-beginning 1)(match-end 1)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1094 (kill-buffer bib-buffer)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1095 ;;; (find-file the-file)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1096 (funcall bib-switch-to-buffer-function (find-file-noselect the-file))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1097 (goto-char (point-min)) ;V2.19 fix
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1098 (re-search-forward (concat "@[^{(]+[{(][\t ]*" the-key "[ ,\n]") nil t)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1099
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1100 ;;--------------------------------------------------------------------------
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1101 ;; Function for bib-apropos
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1102
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1103 (defun bib-apropos-keyword-at-point ()
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1104 ;; Returns the keyword under point for initial input to bib-apropos prompt
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1105 (save-excursion
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1106 (let ((here (point)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1107 (cond
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1108 ((and (re-search-backward "[\n{, ]" nil t)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1109 (string-equal "{" (buffer-substring (match-beginning 0)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1110 (match-end 0))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1111 (if (fboundp 'buffer-substring-no-properties)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1112 (buffer-substring-no-properties (1+ (point)) here)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1113 (buffer-substring (1+ (point)) here)))))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1114
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1115 ;;--------------------------------------------------------------------------
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1116 ;; Functions for Displaying or moving to matching \ref or \label command
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1117
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1118 (defun bib-display-label ()
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1119 ;; "Display environment associated with a label or first ref assoc. with label
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1120 ;;The label or ref name is extracted from the text under the cursor, or the
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1121 ;;user is prompted is nothing suitable is found. The first prompt is for a
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1122 ;;label. If you answer with an empty string, a second prompt for a ref will
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1123 ;;be given."
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1124 (let ((the-name (bib-guess-or-prompt-for-label)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1125 (if (not the-name)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1126 (message "No name given")
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1127 (bib-display-or-find-label the-name t))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1128
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1129 (defun bib-find-label ()
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1130 "Move to a label, or the first occurance of a ref.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1131 The label or ref name is extracted from the text under the cursor.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1132 ;;If nothing suitable is found, the user is prompted. The first prompt is for a
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1133 ;;label. If you answer with an empty string, a second prompt for a ref will be
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1134 ;;given.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1135 ;;
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1136 ;;If within a single file document:
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1137 ;; You can move back with C-x C-x as the mark is set before moving.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1138 ;; You can search for next occurrances of a ref command with C-s C-s.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1139 ;;
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1140 ;;If within a multi-file document (in auctex only)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1141 ;; You can move back with C-x C-x if within the same buffer. If not, just
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1142 ;; select your previous buffer.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1143 ;; You can search for next occurrances of a ref command with tag commands:
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1144 ;; C-u M-. Find next alternate definition of last tag specified.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1145 ;; C-u - M-. Go back to previous tag found."
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1146 (let ((the-name (bib-guess-or-prompt-for-label)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1147 (if (not the-name)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1148 (message "No name given")
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1149 (bib-display-or-find-label the-name nil))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1150
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1151 ;;--------------------------------------------------------------------------
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1152 ;; Functions for Displaying or moving to matching \ref or \label command
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1153
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1154 (defun bib-display-or-find-label (the-name displayf)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1155 ;; work horse for bib-find-label and bib-display-label
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1156 (let* ((masterfile (bib-master-file))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1157 (masterdir (and masterfile
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1158 (file-name-directory masterfile)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1159 (new-point)(new-buffer))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1160 (save-excursion
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1161 ;; Now we are either in a simple file, or with a multi-file document
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1162 (cond
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1163 (masterfile ;Multi-file document
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1164 (cond
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1165 (displayf ;Display only
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1166 (set-buffer (bib-etags-find-noselect the-name masterdir))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1167 (re-search-forward the-name nil t) ;'cos tags puts point line begin
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1168 (if (string-match "^\\\\label" the-name)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1169 (bib-display-this-environment) ;display the label's environment
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1170 (bib-display-this-ref))) ; display the ref's context
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1171 (t ;Move to it
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1172 (setq new-buffer (bib-etags-find-noselect the-name masterdir))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1173 (if bib-novice
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1174 (message
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1175 (substitute-command-keys
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1176 (concat "Use C-u \\[find-tag] to find the next occurrence; "
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1177 "Use C-u - \\[find-tag] to find the previous."))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1178 (if (equal new-buffer (current-buffer))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1179 (setq new-point (point))) ;Moving with the same buffer
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1180 (and (string-match "^\\\\ref" the-name)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1181 (setq search-ring (cons the-name search-ring))))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1182 (t ;Single-file document
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1183 (goto-char (point-min))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1184 (if (search-forward the-name nil t)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1185 (if displayf
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1186 (if (string-match "^\\\\label" the-name)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1187 (bib-display-this-environment) ;Display the environment
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1188 (bib-display-this-ref)) ; display the ref's context
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1189 (setq new-point (match-beginning 0)) ;or move there
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1190 (if bib-novice
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1191 (message
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1192 (substitute-command-keys
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1193 (concat
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1194 "Use \\[isearch-forward] \\[isearch-forward] to find the "
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1195 "next occurrence; Use C-x C-x to go back."))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1196 (if (string-match "^\\\\ref" the-name)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1197 (setq search-ring (cons the-name search-ring))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1198 (setq search-ring (cons (concat "\\ref" (substring the-name 6))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1199 search-ring))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1200 (message "Sorry, cannot find %s" the-name)))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1201 (if new-point
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1202 (progn
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1203 (push-mark (point) t nil) ;We've moving there... push mark
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1204 (goto-char new-point))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1205 (if new-buffer ;We've changing buffer
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1206 ;; (switch-to-buffer new-buffer)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1207 (funcall bib-switch-to-buffer-function new-buffer)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1208 (if (bib-Is-hidden)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1209 (save-excursion
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1210 (beginning-of-line)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1211 (show-entry)))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1212
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1213 (defvar bib-label-prompt-map nil)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1214 (if bib-label-prompt-map
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1215 ()
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1216 (setq bib-label-prompt-map (copy-keymap minibuffer-local-completion-map))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1217 (define-key bib-label-prompt-map " " 'self-insert-command))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1218
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1219 (defun bib-guess-or-prompt-for-label ()
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1220 ;; Guess from context, or prompt the user for a label command
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1221 (save-excursion
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1222 (if (not (looking-at "\\\\")) ;If not on beginning of a command
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1223 (re-search-backward "[\\]"
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1224 (save-excursion (beginning-of-line)(point))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1225 t))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1226 (cond
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1227 ((looking-at "\\\\ref{") ;On \ref, looking for matching \label
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1228 (let ((b (progn (search-forward "{" nil t)(forward-char -1)(point)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1229 (e (progn (forward-sexp 1)(point))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1230 (concat "\\label" (buffer-substring b e))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1231 ((looking-at "\\\\label{") ;On \label, looking for matching \ref
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1232 (let ((b (progn (search-forward "{" nil t)(forward-char -1)(point)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1233 (e (progn (forward-sexp 1)(point))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1234 (concat "\\ref" (buffer-substring b e))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1235 (t ;Prompt the user
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1236 (let* ((minibuffer-local-completion-map bib-label-prompt-map)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1237 (the-alist (create-alist-from-list
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1238 (cdr (reverse LaTeX-label-list))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1239 ;;; LaTeX-label-list example:
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1240 ;;; '(("label3" "label4")("label1" "label2") nil)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1241 ;; so let's get rid of that nil part in embedded list.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1242 (the-name
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1243 (if (string-equal "18" (substring emacs-version 0 2))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1244 (completing-read "Label: " the-alist nil nil nil)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1245 (completing-read "Label: " the-alist nil nil nil
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1246 'LaTeX-find-label-hist-alist))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1247 (if (not (equal the-name ""))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1248 (concat "\\label{" the-name "}")
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1249 ;; else try to get a \ref
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1250 (if (string-equal "18" (substring emacs-version 0 2))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1251 (setq the-name (completing-read "Ref: " the-alist nil nil nil))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1252 (setq the-name (completing-read "Ref: " the-alist nil nil nil
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1253 'LaTeX-find-label-hist-alist)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1254 (if (not (equal the-name ""))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1255 (concat "\\ref{" the-name "}")
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1256 nil)))))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1257
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1258 (defun bib-display-this-ref ()
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1259 "Display a few lines around current point"
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1260 (cond
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1261 ((bib-Is-hidden)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1262 (with-output-to-temp-buffer "*BiBTemp*"
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1263 (princ
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1264 (buffer-substring
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1265 (save-excursion
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1266 (let ((i 3))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1267 (while (and (> i 0)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1268 (re-search-backward "[\n\^M]" nil t)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1269 (setq i (1- i)))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1270 (point))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1271 (save-excursion
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1272 (let ((i 3))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1273 (while (and (> i 0)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1274 (re-search-forward "[\n\^M]" nil t)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1275 (setq i (1- i)))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1276 (point)))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1277 (set-buffer "*BiBTemp*")
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1278 (while (search-forward "\^M" nil t)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1279 (replace-match "\n" nil t))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1280 (goto-char 1)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1281 (if (looking-at "\n") ;Remove first empty line...
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1282 (delete-char 1))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1283 (with-output-to-temp-buffer "*Help*"
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1284 (princ (buffer-substring 1 (point-max))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1285 (bib-cite-fontify-help-as-latex)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1286 (kill-buffer "*BiBTemp*"))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1287 (t
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1288 (with-output-to-temp-buffer ; display the ref's context
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1289 "*Help*"
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1290 (princ
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1291 (buffer-substring (save-excursion (forward-line -2)(point))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1292 (save-excursion (forward-line 3)(point)))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1293 (bib-cite-fontify-help-as-latex))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1294
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1295 (defun bib-display-this-environment ()
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1296 "Display the environment associated with a label, or its section name
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1297 Assumes point is already on the label.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1298 Does not save excursion."
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1299 ;; Bugs: The method used here to detect the environment is *not* foolproof.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1300 ;; It will get confused, for example, between two figure environments,
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1301 ;; picking out both instead of the section label above them. But since
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1302 ;; users typically puts their labels next to the section declaration,
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1303 ;; I'm satisfied with this... for now.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1304 ;; I could have used the following auc-tex functions:
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1305 ;; LaTeX-current-environment
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1306 ;; Function: Return the name (a string) of the enclosing LaTeX environment.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1307 ;; LaTeX-current-section
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1308 ;; Function: Return the level of the section that contain point.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1309 ;; but then this code would only work as part of auc-tex...
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1310 (let ((the-point (point))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1311 (end-point (point))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1312 (the-environment)(foundf))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1313 (while (and (not foundf)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1314 (goto-char end-point) ;Past end of last search
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1315 (re-search-forward "\\(^\\|\^M\\)[ \t]*\\\\end{\\([^}]*\\)}"
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1316 nil t))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1317 (setq end-point (point))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1318 (setq the-environment (buffer-substring (match-beginning 2)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1319 (match-end 2)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1320 (and (not (string-match "document" the-environment))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1321 (re-search-backward (concat "\\(^\\|\^M\\)[ \t]*\\\\begin{"
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1322 (regexp-quote the-environment) "}"))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1323 (<= (point) the-point)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1324 (setq foundf t)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1325 (if foundf ;A good environment
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1326 (progn
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1327 (cond ((bib-Is-hidden) ;Better way is: replace-within-string
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1328 (with-output-to-temp-buffer "*BiBTemp*"
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1329 (princ (buffer-substring (point) end-point)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1330 (set-buffer "*BiBTemp*")
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1331 (while (search-forward "\^M" nil t)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1332 (replace-match "\n" nil t))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1333 (goto-char 1)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1334 (if (looking-at "\n") ;Remove first empty line...
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1335 (delete-char 1))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1336 (with-output-to-temp-buffer "*Help*"
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1337 (princ (buffer-substring 1 (point-max))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1338 (kill-buffer "*BiBTemp*"))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1339 (t
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1340 (with-output-to-temp-buffer "*Help*"
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1341 (princ (buffer-substring (point) end-point)))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1342 (bib-cite-fontify-help-as-latex))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1343 ;; Just find the section declaration
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1344 (goto-char the-point)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1345 (if (re-search-backward
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1346 "\\(^\\|\^M\\)[ \t]*\\\\\\(sub\\)*section{\\([^}]*\\)}" nil t)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1347 (message (buffer-substring (match-beginning 0)(match-end 0)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1348 (error
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1349 "Sorry, could not find an environment or section declaration")))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1350
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1351 (defvar LaTeX-find-label-hist-alist nil "History list for LaTeX-find-label")
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1352 (defvar LaTeX-label-list nil "Used by auc-tex to store label names")
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1353
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1354
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1355 (defun create-alist-from-list (the-list)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1356 ;;; Return a single list from a list that may contain either items
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1357 ;;; or any number of list levels containing items.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1358 ;;; e.g. turns
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1359 ;;; '(("label3" "label4")("label1" "label2") "label")
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1360 ;;; into
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1361 ;;; '(("label3") ("label4") ("label1") ("label2") ("label"))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1362 (mapcar 'list (bib-cite-mh-list-to-string the-list)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1363
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1364 ;;;
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1365 ;;; Following two functions from mh-utils.el (part of GNU emacs)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1366 ;;; I have changed the names in case these functions change what they do.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1367 ;;;
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1368
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1369 (defun bib-cite-mh-list-to-string (l)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1370 ;; Flattens the list L and makes every element of the new list into a string.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1371 (nreverse (bib-cite-mh-list-to-string-1 l)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1372
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1373 (defun bib-cite-mh-list-to-string-1 (l)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1374 (let ((new-list nil))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1375 (while l
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1376 (cond ((null (car l)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1377 ((symbolp (car l))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1378 (setq new-list (cons (symbol-name (car l)) new-list)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1379 ((numberp (car l))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1380 (setq new-list (cons (int-to-string (car l)) new-list)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1381 ((equal (car l) ""))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1382 ((stringp (car l)) (setq new-list (cons (car l) new-list)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1383 ((listp (car l))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1384 (setq new-list (nconc (bib-cite-mh-list-to-string-1 (car l))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1385 new-list)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1386 (t (error "Bad element in mh-list-to-string: %s" (car l))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1387 (setq l (cdr l)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1388 new-list))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1389
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1390 ;; -------------------------------------------------------------------------
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1391 ;; Routines to extract cite keys from text
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1392
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1393 ;; ... is truly remarkable, as shown in \citeN{Thomson77,Test56}. Every
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1394 ;; \cite[{\it e.g.}]{Thomson77,Test56}
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1395
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1396 (defun bib-get-citations (keys-obarray bib-buffer new-buffer substitute)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1397 "Put citations of KEYS-OBARRAY from BIB-BUFFER into NEW-BUFFER,
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1398 Substitute strings if SUBSTITUTE is t
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1399 Return the-warnings as text."
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1400 (let ((the-warnings) ;The only variable to remember...
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1401 (case-fold-search t)) ;All other results go into new-buffer
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1402 ;; bibtex is not case-sensitive for keys.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1403 (save-excursion
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1404 (let ((the-text))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1405 (set-buffer bib-buffer)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1406 (mapatoms ;Do this for each cite-key found...
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1407 (function
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1408 (lambda (cite-key)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1409 (goto-char (point-min))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1410 (if (re-search-forward
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1411 (concat "@[^{(]+[{(][\t ]*"
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1412 (regexp-quote (symbol-name cite-key))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1413 "\\([, ]\\\|$\\)")
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1414 ;; ^^ ^ comma, space or end-of-line
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1415 nil t)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1416 (setq the-text (concat the-text
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1417 (buffer-substring
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1418 (progn (beginning-of-line)(point))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1419 (progn (forward-sexp 2)(point)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1420 "\n\n"))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1421 (setq the-warnings (concat the-warnings
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1422 "Cannot find entry for: "
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1423 (symbol-name cite-key) "\n")))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1424 keys-obarray)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1425 (if (not the-text)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1426 (error "Sorry, could not find any of the references"))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1427 ;; Insert the citations in the new buffer
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1428 (set-buffer new-buffer)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1429 (insert the-text)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1430 (goto-char 1))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1431
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1432 ;; We are at beginning of new-buffer.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1433 ;; Now handle crossrefs
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1434 (let ((crossref-obarray (make-vector 201 0)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1435 (while (re-search-forward
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1436 "[, \t]*crossref[ \t]*=[ \t]*\\(\"\\|\{\\)" nil t)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1437 ;;handle {text} or "text" cases
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1438 (if (string-equal "{" (buffer-substring (match-beginning 1)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1439 (match-end 1)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1440 (re-search-forward "[^\}]+" nil t)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1441 (re-search-forward "[^\"]+" nil t))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1442 (intern (buffer-substring (match-beginning 0)(match-end 0))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1443 crossref-obarray))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1444 ;; Now find the corresponding keys,
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1445 ;; but add them only if not already in `keys-obarray'
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1446 (set-buffer bib-buffer)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1447 (goto-char 1)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1448 (let ((the-text))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1449 (mapatoms ;Do this for each crossref key found...
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1450 (function
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1451 (lambda (crossref-key)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1452 (if (not (intern-soft (symbol-name crossref-key) keys-obarray))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1453 (progn
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1454 ;; Not in keys-obarray, so not yet displayed.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1455 (goto-char (point-min))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1456 (if (re-search-forward
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1457 (concat "@[^{(]+[{(][\t ]*"
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1458 (regexp-quote (symbol-name crossref-key))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1459 "\\(,\\|$\\)")
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1460 nil t)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1461 (setq the-text
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1462 (concat the-text
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1463 (buffer-substring
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1464 (progn (beginning-of-line)(point))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1465 (progn (forward-sexp 2)(point)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1466 "\n\n"))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1467 (setq the-warnings
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1468 (concat the-warnings
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1469 "Cannot find crossref entry for: "
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1470 (symbol-name crossref-key) "\n")))))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1471 crossref-obarray)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1472 ;; Insert the citations in the new buffer
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1473 (set-buffer new-buffer)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1474 (goto-char (point-max))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1475 (if the-text
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1476 (insert the-text)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1477 (goto-char 1))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1478
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1479 ;; Now we have all citations in new-buffer, collect all used @String keys
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1480 ;; Ex: journal = JPO,
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1481 (let ((strings-obarray (make-vector 201 0)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1482 (while (re-search-forward bib-string-regexp nil t)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1483 (intern (buffer-substring (match-beginning 1)(match-end 1))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1484 strings-obarray))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1485 ;; Now find the corresponding @String commands
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1486 ;; Collect either the @string commands, or the string to substitute
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1487 (set-buffer bib-buffer)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1488 (goto-char 1)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1489 (let ((string-alist)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1490 (the-text))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1491 (mapatoms ;Do this for each string-key found...
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1492 (function
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1493 (lambda (string-key)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1494 (goto-char (point-min))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1495 ;; search for @string{ key = {text}} or @string{ key = "text"}
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1496 (if (re-search-forward
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1497 (concat "^[ \t]*@string[{(]"
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1498 (regexp-quote (symbol-name string-key))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1499 "[\t ]*=[\t ]*\\(\"\\|\{\\)")
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1500 nil t)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1501 (let ((the-string-start (1- (match-end 1))) ;catch bracket
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1502 ;;handle {text} or "text" cases
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1503 (the-string-end
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1504 (cond
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1505 ((string-equal "\""
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1506 (buffer-substring (match-beginning 1)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1507 (match-end 1)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1508
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1509 (re-search-forward "[^\\]\"" nil t)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1510 (point))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1511 (t
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1512 (forward-char -1)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1513 (forward-list 1)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1514 (point)))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1515 (if substitute ;Collect substitutions
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1516 (setq string-alist
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1517 (append
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1518 string-alist
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1519 (list
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1520 (cons (symbol-name string-key)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1521 (regexp-quote
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1522 (buffer-substring the-string-start
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1523 the-string-end))))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1524 ;;Collect the strings command themseves
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1525 (setq the-text
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1526 (concat the-text
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1527 (buffer-substring
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1528 (progn (forward-char 1)(point))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1529 (re-search-backward "^[ \t]*@string[{(]"
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1530 nil t))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1531 "\n"))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1532 ;; @string entry not found
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1533 (if (not (member (symbol-name string-key)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1534 bib-string-ignored-warning))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1535 (setq the-warnings
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1536 (concat the-warnings
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1537 "Cannot find @String entry for: "
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1538 (symbol-name string-key) "\n"))))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1539 strings-obarray)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1540 ;; Now we have `the-text' of @string commands,
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1541 ;; or the `string-alist' to substitute.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1542 (set-buffer new-buffer)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1543 (if substitute
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1544 (while string-alist
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1545 (goto-char 1)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1546 (let ((the-key (car (car string-alist)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1547 (the-string (cdr (car string-alist))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1548 (while (re-search-forward
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1549 (concat "\\(^[, \t]*[a-zA-Z]+[ \t]*=[ \t]*\\)"
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1550 the-key
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1551 "\\([, \t\n]\\)")
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1552 nil t)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1553 (replace-match (concat "\\1" the-string "\\2") t)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1554 (setq string-alist (cdr string-alist)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1555 ;; substitute is nil; Simply insert text of @string commands
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1556 (goto-char 1)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1557 (if the-text
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1558 (insert the-text "\n")))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1559 (goto-char 1))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1560
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1561 ;; We are done!
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1562 ;; Return the warnings...
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1563 the-warnings))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1564
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1565 (defun bib-get-citekeys-obarray ()
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1566 "Return obarray of citation key (within curly brackets) under cursor."
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1567 (save-excursion
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1568 ;; First find *only* a key *within a cite command
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1569 (let ((the-point (point))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1570 (keys-obarray (make-vector 201 0)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1571 ;; First try to match a cite command
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1572 (if (and (skip-chars-backward "a-zA-Z") ;Stops on \ or {
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1573 (looking-at "[a-zA-Z]*cite[a-zA-Z]*"))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1574 (progn
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1575 ;;skip over any optional arguments to \cite[][]{key} command
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1576 (skip-chars-forward "a-zA-Z")
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1577 (while (looking-at "\\[")
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1578 (forward-list 1))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1579 (re-search-forward "{[ \n]*\\([^,} \n]+\\)" nil t)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1580 (intern (buffer-substring (match-beginning 1)(match-end 1))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1581 keys-obarray)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1582 (while (and (skip-chars-forward " \n") ;no effect on while
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1583 (looking-at ","))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1584 (forward-char 1)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1585 ;;The following re-search skips over leading spaces
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1586 (re-search-forward "\\([^,} \n]+\\)" nil t)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1587 (intern (buffer-substring (match-beginning 1)(match-end 1))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1588 keys-obarray)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1589
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1590 ;; Assume we are on the keyword
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1591 (goto-char the-point)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1592 (let ((the-start (re-search-backward "[\n{, ]" nil t))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1593 (the-end (progn (goto-char the-point)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1594 (re-search-forward "[\n}, ]" nil t))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1595 (if (and the-start the-end)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1596 (intern (buffer-substring (1+ the-start) (1- the-end))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1597 keys-obarray)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1598 ;; Neither...
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1599 (error "Sorry, can't find a reference here"))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1600 keys-obarray)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1601
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1602 (defun bib-buffer-citekeys-obarray ()
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1603 "Extract citations keys used in the current buffer"
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1604 (let ((keys-obarray (make-vector 201 0)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1605 (save-excursion
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1606 (goto-char (point-min))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1607 ;; Following must allow for \cite[e.g.][]{key} !!!
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1608 ;; regexp for \cite{key1,key2} was "\\\\[a-Z]*cite[a-Z]*{\\([^,}]+\\)"
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1609 (while (re-search-forward "\\\\[a-zA-Z]*cite[a-zA-Z]*\\(\\[\\|{\\)"
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1610 nil t)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1611 (backward-char 1)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1612 (while (looking-at "\\[") ; ...so skip all bracketted options
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1613 (forward-sexp 1))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1614 ;; then lookup first key
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1615 (if (looking-at "{[ \n]*\\([^,} \n]+\\)")
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1616 (progn
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1617 (intern (buffer-substring (match-beginning 1)(match-end 1))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1618 keys-obarray)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1619 (goto-char (match-end 1))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1620 (while (and (skip-chars-forward " \n")
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1621 (looking-at ","))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1622 (forward-char 1)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1623 (re-search-forward "\\([^,} \n]+\\)" nil t)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1624 (intern (buffer-substring (match-beginning 1)(match-end 1))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1625 keys-obarray)))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1626 (if keys-obarray
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1627 keys-obarray
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1628 (error "Sorry, could not find any citation keys in this buffer.")))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1629
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1630 ;;---------------------------------------------------------------------------
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1631 ;; Multi-file document programming requirements:
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1632 ;; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1633 ;; bib-make-bibliography
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1634 ;; bib-document-citekeys-obarray needs the master .aux file to extract
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1635 ;; citation keys.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1636 ;; Included .aux files (corresponding to \include'd LaTeX files) are
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1637 ;; then specified relative to the master-file-directory.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1638 ;;
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1639 ;; bib-get-bibliography (used by interactive commands to extract bib sources)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1640 ;;
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1641 ;; bibtex source filenames are returned from (LaTeX-bibliography-list)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1642 ;; unformatted. Since only a single \bibliogragrphy command is allowed
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1643 ;; by BiBTeX in a document, it is safe to assume that their path is
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1644 ;; relative to the master file's directory (since the path is relative
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1645 ;; to where the BiBTeX program is actually ran).
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1646 ;;
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1647 ;; imenu
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1648 ;;
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1649 ;; Requires list of all tex files (complete with paths) to call etags on
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1650 ;; them.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1651 ;; I used (TeX-style-list) to get the list of possible tex files, but
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1652 ;; they are not in sorted order. Therefore the imenu would be somewhat
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1653 ;; confusing. I'll have to do the scan myself, except that I'll only be
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1654 ;; looking at the master file for \include statements.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1655
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1656 ;; (See TeX-check-files, used in TeX-save-document. All documents related
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1657 ;; files are returned by (TeX-style-list) and stored in TeX-active-styles.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1658 ;; Original idea was to search TeX-check-path for files listed in
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1659 ;; TeX-active-styles (with possible relative or full paths) that end in .tex.)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1660
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1661 (defun bib-master-directory ()
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1662 ;; Returns the directory associated with the master file.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1663 ;; If no master file, then return current default.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1664 (let ((masterfile (bib-master-file)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1665 (if masterfile
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1666 (file-name-directory (expand-file-name (TeX-master-file)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1667 default-directory)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1668
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1669 (defun bib-master-file ()
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1670 ;; return master file full path, or nil if not a multi-file document
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1671 ;; I wish there were a better way to tell about non multi-file documents...
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1672 (let ((master
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1673 (cond
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1674 ((not (boundp 'TeX-master))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1675 ;; This buffer doesn't know what a master file is, so return now.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1676 nil)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1677 ((and TeX-master ;Set, but not to t
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1678 (not (eq TeX-master 't))) ; then we have an actual name
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1679 (expand-file-name TeX-master))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1680 ((and (eq TeX-master 't) ;Test if master file itself
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1681 (progn ;But also require at least one \include
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1682 (save-excursion
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1683 (goto-char 1) ;Too bad I have to do this search...
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1684 ;; Require that user uses \input{file}
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1685 ;; rather than \input file
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1686 (re-search-forward "^[ \t]*\\\\\\(include\\|input\\){"
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1687 nil t))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1688 (buffer-file-name))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1689 (t
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1690 nil))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1691 (cond
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1692 ((not master)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1693 nil)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1694 ((string-match ".tex$" master)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1695 master)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1696 (t
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1697 (concat master ".tex")))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1698
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1699 ;; I don't use this one because files are not returned in order...
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1700 ;; (defun bib-document-TeX-files ()
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1701 ;; ;; Return all tex input files associated with a known multi-file document.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1702 ;; (let ((master-directory (bib-master-directory))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1703 ;; (the-list (cons (file-name-nondirectory (TeX-master-file))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1704 ;; (TeX-style-list)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1705 ;; ;; TeX-style-list returns "../master" for the main file if TeX-master
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1706 ;; ;; was set like that. "../master" would not be found relative
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1707 ;; ;; to the master-directory! So let's add it to the list w/o directory.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1708 ;; (the-result)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1709 ;; (the-file))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1710 ;; (while the-list
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1711 ;; (setq the-file (expand-file-name (car the-list) master-directory))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1712 ;; (setq the-list (cdr the-list))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1713 ;; (and (not (string-match ".tex$" the-file))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1714 ;; (setq the-file (concat the-file ".tex")))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1715 ;; (and (file-readable-p the-file)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1716 ;; (not (member the-file the-result)) ;listed already?
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1717 ;; (setq the-result (cons the-file the-result))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1718 ;; the-result))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1719
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1720 (defun bib-document-TeX-files ()
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1721 ;; For a multi-file document in auctex only.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1722 ;; Return all tex input files associated with a *known* multi-file document.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1723 ;; No checking is done that this is a real multi-file document.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1724
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1725 ;; sets global variable bib-document-TeX-files-warnings
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1726
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1727 (setq bib-document-TeX-files-warnings nil)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1728 (let* ((masterfile (bib-master-file))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1729 (dir (and masterfile (file-name-directory masterfile)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1730 (tex-buffer (get-buffer-create "*tex-document*"))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1731 (the-list (list masterfile))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1732 (the-file))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1733 (if (not masterfile)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1734 (progn
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1735 (kill-buffer tex-buffer)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1736 (error
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1737 "Sorry, but this is not a multi-file document (Try C-u C-c C-n if using auctex)")))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1738 (save-excursion
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1739 (set-buffer tex-buffer)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1740 ;; set its directory so relative includes work without expanding
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1741 (setq default-directory dir)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1742 (insert-file-contents masterfile)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1743 (goto-char (point-min))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1744 (while (re-search-forward "^[ \t]*\\\\\\(input\\|include\\){\\(.*\\)}"
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1745 nil t)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1746 (let ((the-file (buffer-substring (match-beginning 2)(match-end 2))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1747 (if (string-match ".sty$" the-file) ;Skip over style files!
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1748 nil
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1749 (if (and (not (file-readable-p (expand-file-name the-file dir)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1750 (not (string-match ".tex$" the-file)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1751 (setq the-file (concat the-file ".tex")))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1752 (setq the-file (expand-file-name the-file dir))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1753 (if (not (file-readable-p the-file))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1754 (setq bib-document-TeX-files-warnings
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1755 (concat
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1756 bib-document-TeX-files-warnings
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1757 (format "Warning: File not found: %s" the-file)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1758 (setq the-list (cons (expand-file-name the-file dir) the-list))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1759 (end-of-line)(insert "\n")
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1760 (insert-file-contents the-file))))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1761 (kill-buffer tex-buffer)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1762 (nreverse the-list)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1763
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1764 (defun bib-document-citekeys-obarray ()
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1765 ;; Return cite keys obarray for multi-file document, or nil if not a multi-file
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1766 ;; document. This is a auc-tex supported feature only.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1767 ;; Also, see bib-buffer-citekeys-obarray.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1768 ;; Sets global variable bib-document-citekeys-obarray-warnings.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1769 (setq bib-document-citekeys-obarray-warnings nil)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1770 (let ((master-tex (bib-master-file))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1771 (master-aux))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1772 (if (not master-tex)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1773 nil ;Not a multifile document. No need...
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1774 (setq master-aux (bib-return-aux-file-from-tex master-tex "aux"))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1775 (or (file-readable-p master-aux)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1776 (error "Sorry, cannot read file %s" master-aux))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1777 (and (file-newer-than-file-p master-tex master-aux)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1778 (setq bib-document-citekeys-obarray-warnings
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1779 (format "Warning: %s is out of date relative to %s.\n"
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1780 master-aux master-tex)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1781 (let ((work-buffer (get-buffer-create "*bib-cite-work*"))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1782 (keys-obarray (make-vector 201 0)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1783 (save-excursion
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1784 (set-buffer work-buffer)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1785 (insert-file-contents master-aux)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1786 ;; Because we will be looking for \input statements, we need to set
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1787 ;; the default directory to that of the master file.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1788 (setq default-directory (file-name-directory master-tex))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1789 ;; bib-make-bibliography will need this also to find .bib files
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1790 ;; look for \@input{chap1/part1.aux}
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1791 (while (re-search-forward "^\\\\@input{\\(.*\\)}$" nil t)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1792 (let* ((auxfile (buffer-substring(match-beginning 1)(match-end 1)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1793 (texfile (bib-return-aux-file-from-tex auxfile "tex")))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1794 (if (not (file-readable-p auxfile))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1795 (setq bib-document-citekeys-obarray-warnings
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1796 (concat
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1797 bib-document-citekeys-obarray-warnings
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1798 (format "Warning: %s is not found or readable.\n"
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1799 auxfile)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1800 (if (file-newer-than-file-p texfile auxfile)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1801 (setq bib-document-citekeys-obarray-warnings
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1802 (concat
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1803 bib-document-citekeys-obarray-warnings
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1804 (format
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1805 "Warning: %s is out of date relative to %s.\n"
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1806 auxfile texfile))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1807 (end-of-line)(insert "\n")
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1808 (insert-file-contents (buffer-substring (match-beginning 1)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1809 (match-end 1))))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1810 (goto-char 1)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1811 ;; look for \citation{gertsenshtein59}
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1812 (while (re-search-forward "^\\\\citation{\\(.*\\)}$" nil t)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1813 (intern (buffer-substring (match-beginning 1)(match-end 1))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1814 keys-obarray)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1815 (kill-buffer work-buffer)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1816 keys-obarray))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1817
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1818 (defun bib-return-aux-file-from-tex (texname ext)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1819 ;; given name.name.XXX return name.name.ext
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1820 (concat (substring texname 0 -3) ext))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1821
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1822 (defun bib-etags-find-noselect (tag &optional masterdir)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1823 ;; Returns a buffer with point on `tag'. buffer is not selected.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1824 ;; Makes sure TAGS file exists, etc.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1825 (require 'etags)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1826 (let* ((master (or masterdir (bib-master-directory)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1827 (the-buffer (current-buffer))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1828 (new-buffer)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1829 (the-tags-file-name (expand-file-name bib-etags-filename master)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1830 (or (file-exists-p the-tags-file-name) ;make sure TAGS exists
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1831 (bib-etags master))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1832 (or (equal the-tags-file-name tags-file-name) ;make sure it's current
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1833 (visit-tags-table the-tags-file-name))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1834 ;; find-tag-noselect should set the TAGS file for the new buffer
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1835 ;; that's what C-h f visit-tags-table says...
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1836 (if (string-match "XEmacs\\|Lucid" emacs-version)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1837 (progn
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1838 (find-tag tag)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1839 (setq new-buffer (current-buffer))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1840 (set-buffer the-buffer))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1841 (setq new-buffer (find-tag-noselect tag)) ;Seems to set buffer to TAGS
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1842 (set-buffer the-buffer))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1843 new-buffer))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1844
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1845 ;;---------------------------------------------------------------------------
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1846 ;; imenu stuff
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1847 ;; All of this should only be loaded if imenu is *already* loaded because
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1848 ;; we redefine imenu here.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1849
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1850 (cond
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1851 (bib-use-imenu
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1852 (require 'imenu)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1853 (require 'cl)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1854 ;;; Now done at end of this file:
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1855 ;;(add-hook 'LaTeX-mode-hook 'LaTeX-hook-setq-imenu)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1856
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1857 (defvar bib-imenu-document-counter nil
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1858 "bib-cite internal variable")
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1859
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1860 ;; FIXME: If bib-cite becomes a minor mode, then this hook will go away
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1861 ;; and this will be done in the minor-mode function.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1862 (defun LaTeX-hook-setq-imenu ()
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1863 ;; User who *never* uses multi-file documents could change this to:
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1864 ;; 'imenu--create-LaTeX-index-for-buffer
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1865 (setq imenu-create-index-function 'imenu--create-LaTeX-index))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1866
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1867 (defun imenu--create-LaTeX-index ()
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1868 ;; dispatch to proper function, depending on whether a multi-file document.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1869 (let ((masterfile (bib-master-file)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1870 (if masterfile
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1871 (imenu--create-LaTeX-index-for-document masterfile)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1872 (imenu--create-LaTeX-index-for-buffer))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1873
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1874 (defun imenu--create-LaTeX-index-for-document (masterfile)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1875 ;; For a multi-file document in auctex only.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1876 ;; Create imenu--index-alist for master file buffer and use the same
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1877 ;; for all input files? This would be faster... Maybe in next version?
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1878 (bib-etags) ;Create a new TAGS file, user needs it.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1879 (let ((tex-buffer (get-buffer-create "*imenu-tex*"))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1880 (index-alist '())
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1881 (index-label-alist '())
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1882 (prev-pos))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1883 (save-excursion
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1884 (set-buffer tex-buffer)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1885 ;; set its directory so relative includes work without expanding
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1886 (setq default-directory (file-name-directory masterfile))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1887 (insert-file-contents masterfile)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1888 (goto-char (point-min))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1889 (while (re-search-forward
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1890 "^[ \t]*\\\\\\(input\\|include\\){\\([^}]*\\)}" nil t)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1891 (let ((the-file (buffer-substring (match-beginning 2)(match-end 2))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1892 (if (and (not (file-readable-p
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1893 (expand-file-name the-file default-directory)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1894 (not (string-match ".tex$" the-file)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1895 (setq the-file (concat the-file ".tex")))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1896 (end-of-line)(insert "\n")
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1897 (insert-file-contents the-file)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1898 ;; Now, the document is like any other tex file
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1899 (setq bib-imenu-document-counter -99) ;IDs menu entries start at -100
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1900 (goto-char (point-max))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1901 (imenu-progress-message prev-pos 0 t)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1902 (while
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1903 (re-search-backward
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1904 ;;; "\\\\\\(\\(sub\\)*section\\|chapter\\|label\\){[^}]+}"
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1905 "\\(\\\\label\\)\\|\\(^[ ]*\\\\\\(\\(sub\\)*section\\|chapter\\)\\){[^}]+}"
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1906 nil t)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1907 (imenu-progress-message prev-pos nil t)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1908 (save-match-data
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1909 (save-excursion
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1910 (cond
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1911 ((looking-at "\\\\label")
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1912 (push (imenu--LaTeX-name-and-etags)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1913 index-label-alist))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1914 (t
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1915 (push (imenu--LaTeX-name-and-etags)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1916 index-alist))))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1917 (kill-buffer tex-buffer)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1918 (imenu-progress-message prev-pos 100 t)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1919 ;;Michal Mnuk's add-on removes \label <Michal.Mnuk@risc.uni-linz.ac.at>
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1920 ;;Plus PSG's fix for 19.31 w/o imenu-create-submenu-name
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1921 (and index-label-alist
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1922 (push (cons (or (and (fboundp 'imenu-create-submenu-name)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1923 (imenu-create-submenu-name "Labels"))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1924 "Labels")
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1925 (sort (imenu--remove-LaTeX-keyword-list
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1926 index-label-alist) 'imenu--label-cmp))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1927 index-alist))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1928 ;;(and index-label-alist
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1929 ;; (push (cons (imenu-create-submenu-name "Labels")
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1930 ;; index-label-alist)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1931 ;; index-alist))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1932 index-alist)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1933
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1934 (defun imenu--create-LaTeX-index-for-buffer ()
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1935 ;; For non-multi-file documents.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1936 (let ((index-alist '())
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1937 (index-label-alist '())
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1938 prev-pos)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1939 (setq bib-imenu-document-counter -99) ;IDs menu entries starting at -100
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1940 (goto-char (point-max))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1941 (imenu-progress-message prev-pos 0 t)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1942 (while
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1943 (re-search-backward
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1944 ;;; Better regexp, but slow
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1945 ;;; "^[^;]*\\(\\\\\\)\\(\\(sub\\)*section\\|chapter\\|label\\){[^}]+}"
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1946 ;;; Original regexp that would catch commented-out stuff
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1947 ;;; "\\\\\\(\\(sub\\)*section\\|chapter\\|label\\){[^}]+}"
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1948 "\\(\\\\label\\)\\|\\(^[ ]*\\\\\\(\\(sub\\)*section\\|chapter\\)\\){[^}]+}"
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1949 nil t)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1950 (imenu-progress-message prev-pos nil t)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1951 (save-match-data
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1952 (save-excursion
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1953 (cond
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1954 ((looking-at "\\\\label")
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1955 (push (imenu--LaTeX-name-and-position)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1956 index-label-alist))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1957 (t
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1958 (push (imenu--LaTeX-name-and-position)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1959 index-alist))))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1960 (imenu-progress-message prev-pos 100 t)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1961 ;;Michal Mnuk's add-on removes \label <Michal.Mnuk@risc.uni-linz.ac.at>
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1962 ;;Plus PSG's fix for 19.31 w/o imenu-create-submenu-name
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1963 (and index-label-alist
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1964 (push (cons (or (and (fboundp 'imenu-create-submenu-name)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1965 (imenu-create-submenu-name "Labels"))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1966 "Labels")
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1967 (sort (imenu--remove-LaTeX-keyword-list
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1968 index-label-alist) 'imenu--label-cmp))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1969 index-alist))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1970 ;;(and index-label-alist
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1971 ;; (push (cons (imenu-create-submenu-name "Labels")
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1972 ;; index-label-alist)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1973 ;; index-alist))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1974 index-alist))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1975
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1976 ;;Michal Mnuk's three routines:
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1977 (defun imenu--remove-LaTeX-keyword-list (llist)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1978 "Remove the LaTeX KEYWORD from car's of all elements in LLIST."
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1979 (mapcar
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1980 (function (lambda (element)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1981 (imenu--remove-LaTeX-keyword-el element "label")))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1982 llist))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1983
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1984 (defun imenu--remove-LaTeX-keyword-el (element keyword)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1985 "Remove the LaTeX KEYWORD from car of ELEMENT."
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1986 (save-match-data
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1987 ;; Shouls I have extra option here: "[
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1988 (string-match (concat "\\\\" keyword "{\\(.*\\)}") (car element))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1989 (cons
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1990 (substring (car element) (match-beginning 1) (match-end 1))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1991 (cdr element))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1992
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1993 (defun imenu--label-cmp (el1 el2)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1994 "Predicate to compare labels in lists produced by
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1995 imenu--create-LaTeX-index."
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1996 (string< (car el1) (car el2)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1997
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1998 (defun imenu--LaTeX-name-and-position ()
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
1999 (save-excursion
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2000 ;; We're on the opening slash
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2001 (let ((beg (point))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2002 (end (progn (search-forward "{" nil t)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2003 (forward-char -1)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2004 (forward-sexp 1)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2005 (point)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2006 (marker (make-marker)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2007 (set-marker marker beg)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2008 (cons (buffer-substring beg end) marker))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2009
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2010 (defun imenu--LaTeX-name-and-etags ()
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2011 (save-excursion
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2012 (setq bib-imenu-document-counter (1- bib-imenu-document-counter))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2013 (cons (buffer-substring (point)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2014 (progn (search-forward "{")
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2015 (forward-char -1)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2016 (forward-sexp 1)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2017 (point)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2018 bib-imenu-document-counter)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2019
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2020 ;; Updated to imenu in Emacs 19.33
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2021 (defun imenu (index-item)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2022 "Jump to a place in the buffer chosen using a buffer menu or mouse menu.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2023 See `imenu-choose-buffer-index' for more information."
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2024 (interactive
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2025 (list (save-restriction
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2026 (widen)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2027 (imenu-choose-buffer-index))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2028 ;; Convert a string to an alist element.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2029 (if (stringp index-item)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2030 (setq index-item (assoc index-item (imenu--make-index-alist))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2031 (and index-item
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2032 (progn
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2033 (push-mark)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2034 (cond
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2035 ((markerp (cdr index-item))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2036 (if (or ( > (marker-position (cdr index-item)) (point-min))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2037 ( < (marker-position (cdr index-item)) (point-max)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2038 ;; widen if outside narrowing
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2039 (widen))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2040 (goto-char (marker-position (cdr index-item))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2041 ;; PSG - Handle tags
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2042 ((and (numberp (cdr index-item))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2043 (< (cdr index-item) -99))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2044 (find-tag (car index-item)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2045 (t
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2046 (if (or ( > (cdr index-item) (point-min))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2047 ( < (cdr index-item) (point-max)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2048 ;; widen if outside narrowing
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2049 (widen))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2050 (goto-char (cdr index-item)))))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2051 ;;; end of bib-use-imenu stuff
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2052 ))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2053 ;; --------------------------------------------------------------------------
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2054 ;; The following routines make a temporary bibliography buffer
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2055 ;; holding all bibtex files found.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2056
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2057 (defun bib-get-bibliography (include-filenames-f)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2058 "Returns a new bibliography buffer holding all bibtex files in the document.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2059
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2060 If using auc-tex, and either TeX-parse-self is set or C-c C-n is used to
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2061 parse the document, then the entire multifile document will be searched
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2062 for \bibliography commands.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2063
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2064 If this fails, the current buffer is searched for the first \bibliography
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2065 command.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2066
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2067 If include-filenames-f is true, include as a special header the filename
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2068 of each bib file.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2069
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2070 Puts the buffer in text-mode such that forward-sexp works with german \"
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2071 accents embeded in bibtex entries."
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2072 (let ((bib-list (or (and (fboundp 'LaTeX-bibliography-list)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2073 (boundp 'TeX-auto-update)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2074 (LaTeX-bibliography-list))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2075 ;; LaTeX-bibliography-list (if bound) returns an unformatted list of
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2076 ;; bib files used in the document, but only if parsing is turned on
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2077 ;; or C-c C-n was used.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2078 (bib-bibliography-list)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2079 (bib-buffer (get-buffer-create "*bibtex-bibliography*"))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2080 ;; Path is relative to the master directory
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2081 (default-directory (bib-master-directory))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2082 (the-name)(the-warnings)(the-file))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2083 (save-excursion
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2084 ;; such that forward-sexp works with embeeded \" in german,
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2085 ;; and unbalanced ()
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2086 (set-buffer bib-buffer)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2087 (erase-buffer)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2088 (set-syntax-table text-mode-syntax-table)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2089 ;; (if (boundp 'bibtex-mode-syntax-table)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2090 ;; (set-syntax-table bibtex-mode-syntax-table)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2091 ;; (text-mode))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2092 )
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2093 ;;We have a list of bib files
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2094 ;;Search for them, include them, list those not readable
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2095 (while bib-list
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2096 (setq the-name (car (car bib-list))) ;Extract the string only
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2097 (setq bib-list (cdr bib-list))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2098 (setq the-name
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2099 (substring the-name
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2100 (string-match "[^ ]+" the-name) ;remove leading spaces
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2101 (string-match "[ ]+$" the-name))) ;remove trailing space
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2102 (if (not (string-match "\\.bib$" the-name))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2103 (setq the-name (concat the-name ".bib")))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2104 (setq the-file
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2105 (or
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2106 (and (file-readable-p (expand-file-name (concat "./" the-name)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2107 (expand-file-name (concat "./" the-name)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2108 (psg-checkfor-file-list the-name
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2109 (psg-list-env bib-bibtex-env-variable))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2110 ;; Check for BIBINPUT env variable as well (by popular demand!)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2111 (psg-checkfor-file-list the-name (psg-list-env "BIBINPUT"))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2112 (and (boundp 'TeX-check-path)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2113 (psg-checkfor-file-list the-name TeX-check-path))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2114 (if the-file
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2115 (progn
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2116 (save-excursion
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2117 (set-buffer bib-buffer)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2118 (goto-char (point-max))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2119 (if include-filenames-f
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2120 (insert "%%%Filename: " the-file "\n"))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2121 (insert-file-contents the-file nil)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2122 (goto-char 1)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2123 (setq the-warnings
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2124 (concat the-warnings "Could not read file: " the-name "\n"))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2125 (if the-warnings
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2126 (progn
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2127 (with-output-to-temp-buffer "*Help*"
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2128 (princ the-warnings))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2129 (kill-buffer bib-buffer)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2130 (error
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2131 "Sorry, can't find all bibtex files in \\bibliography command"))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2132 bib-buffer)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2133
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2134 (defun bib-bibliography-list ()
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2135 "Return list of bib files listed in first \\bibliography command in buffer
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2136 Similar output to auc-tex's LaTeX-bibliography-list
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2137 The first element may contain trailing whitespace (if there was any in input)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2138 although BiBTeX doesn't allow it!"
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2139 (save-excursion
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2140 (goto-char 1)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2141 (if (not (re-search-forward "^[ \t]*\\\\bibliography{[ \t]*\\([^},]+\\)"
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2142 nil t))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2143 (error "Sorry, can't find \\bibliography command anywhere")
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2144 (let ((the-list (list (buffer-substring
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2145 (match-beginning 1)(match-end 1))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2146 (doNext t))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2147 (while doNext
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2148 (if (looking-at ",")
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2149 (setq the-list
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2150 (append the-list
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2151 (list (buffer-substring
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2152 (progn (skip-chars-forward ", ")(point))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2153 (progn (re-search-forward "[,}]" nil t)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2154 (backward-char 1)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2155 (skip-chars-backward ", ")
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2156 (point))))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2157 (setq doNext nil)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2158 (mapcar 'list the-list)))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2159
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2160 ;; BibTeX-mode key def to create auc-tex's parsing file.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2161 (defun bib-create-auto-file ()
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2162 "Force the creation of the auc-tex auto file for a bibtex buffer"
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2163 (interactive)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2164 (if (not (require 'latex))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2165 (error "Sorry, This is only useful if you have auc-tex"))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2166 (let ((TeX-auto-save t)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2167 (TeX-auto-update t)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2168 (TeX-auto-regexp-list BibTeX-auto-regexp-list))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2169 ;; TeX-auto-write
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2170 ;; -> calls TeX-auto-store
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2171 ;; -> calls TeX-auto-parse
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2172 ;; clears LaTeX-auto-bibtem (temporary holding space for bibitems)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2173 ;; searches buffer using regexp in TeX-auto-regexp-list
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2174 ;; -> if LaTeX-auto-bibtem (the temporary holding space for bibitems)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2175 ;; holds stuffs like
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2176 ;; ("Zimmermann:1991" "Anger_et_al:1993")
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2177 ;; as determined by
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2178 ;; (member nil (mapcar 'TeX-auto-entry-clear-p TeX-auto-parser))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2179 ;; then it creates the auto file.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2180
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2181 ;; TeX-auto-write may call TeX-master-file which may fail if
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2182 ;; TeX-header-end is unset (by LaTeX-common-initialization in latex-mode)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2183 (if (not TeX-header-end)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2184 (setq TeX-header-end LaTeX-header-end))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2185
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2186 (TeX-auto-write)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2187
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2188 ;; ---------------------------------------------------------------------------
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2189 ;; Key definitions start here...
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2190
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2191 ;; Christoph Wedler <wedler@fmi.uni-passau.de>
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2192 ;; Replace eval-after-load (which doesn't work with efs anyway)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2193 ;; with add-submenu in bib-cite-initialize
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2194
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2195 ;;(if ((and (string-match "XEmacs\\|Lucid" emacs-version)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2196 ;; (or window-system
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2197 ;; (fboundp 'smart-menu)) ;text menus by Bob Weiner
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2198 ;; (not (fboundp 'eval-after-load))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2199 ;; ;; define eval-after-load for XEmacs
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2200 ;; (defun eval-after-load (file form)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2201 ;; "Arrange that, if FILE is ever loaded, FORM will be run at that
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2202 ;;time.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2203 ;;This makes or adds to an entry on `after-load-alist'.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2204 ;;It does nothing if FORM is already on the list for FILE.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2205 ;;FILE should be the name of a library, with no directory name."
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2206 ;; (or (assoc file after-load-alist)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2207 ;; (setq after-load-alist (cons (list file) after-load-alist)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2208 ;; (let ((elt (assoc file after-load-alist)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2209 ;; (or (member form (cdr elt))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2210 ;; (nconc elt (list form))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2211 ;; form))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2212
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2213 (defvar bib-cite-map
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2214 (let ((map (make-sparse-keymap)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2215 (define-key map "a" 'bib-apropos)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2216 (define-key map "m" 'bib-make-bibliography)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2217 (define-key map "d" 'bib-display)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2218 (define-key map "e" 'bib-etags)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2219 (define-key map "f" 'bib-find)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2220 (define-key map "h" 'bib-highlight-mouse)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2221 map)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2222 "Keymap to bind to \\C-cb in latex keymap")
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2223
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2224 (cond
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2225 ((and (string-match "XEmacs\\|Lucid" emacs-version)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2226 (or window-system
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2227 (fboundp 'smart-menu))) ;text menus by Bob Weiner
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2228 ;;
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2229 ;; xemacs under X with auc-tex
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2230 ;;
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2231
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2232 ;; Christoph Wedler <wedler@fmi.uni-passau.de>
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2233 (defvar bib-cite-xemacs-menu
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2234 '("Bib-Cite"
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2235 ;;"---"
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2236 ["Make BibTeX bibliography buffer" bib-make-bibliography t]
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2237 ["Display citation or matching \\ref or \\label" bib-display t]
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2238 ["Find BibTeX citation or matching \\ref or \\label" bib-find t]
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2239 ["Search apropos BibTeX files" bib-apropos t]
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2240 ["Build TAGS file for multi-file document" bib-etags (bib-master-file)]
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2241 ["Refresh \\cite, \\ref and \\label mouse highlight"
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2242 bib-highlight-mouse t])
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2243 "Submenu of LaTeX menu, used by bib-cite.")
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2244
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2245 ;;; Add to bibtex.el's popup menu
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2246 (defvar bib-cite-xemacs-bibtex-mode-menu
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2247 '("---"
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2248 "Bib-Cite"
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2249 "---"
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2250 ["Search apropos BibTeX files" bib-apropos t]
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2251 ["Create auc-tex auto parsing file" bib-create-auto-file t])
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2252 "Submenu of bibtex-mode menu, used by bib-cite.")
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2253
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2254 (if (boundp 'bibtex-menu)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2255 ;; Add menu now
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2256 (setq bibtex-menu
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2257 (append
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2258 bibtex-menu
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2259 bib-cite-xemacs-bibtex-mode-menu))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2260 ;; Setup to add menu later
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2261 (defun bib-cite-bibtex-mode-hook ()
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2262 (if (boundp 'bibtex-menu)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2263 (progn
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2264 (setq bibtex-menu
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2265 (append
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2266 bibtex-menu
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2267 bib-cite-xemacs-bibtex-mode-menu))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2268 (remove-hook 'bibtex-mode-hook 'bib-cite-bibtex-mode-hook))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2269 (add-hook 'bibtex-mode-hook 'bib-cite-bibtex-mode-hook))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2270 ;;; Done - Add to bibtex.el's popup menu
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2271
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2272 ;; (eval-after-load
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2273 ;; "latex"
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2274 ;; '(progn
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2275 ;; (add-menu-button '("LaTeX") ["----" nil t])
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2276 ;; (add-menu-button
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2277 ;; '("LaTeX") ["Make BibTeX bibliography buffer" bib-make-bibliography t])
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2278 ;; (add-menu-button
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2279 ;; '("LaTeX") ["Display citation or matching \\ref or \\label"
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2280 ;; bib-display t])
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2281 ;; (add-menu-button
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2282 ;; '("LaTeX") ["Find BibTeX citation or matching \\ref or \\label"
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2283 ;; bib-find t])
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2284 ;; (add-menu-button
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2285 ;; '("LaTeX") ["Search apropos BibTeX files" bib-apropos t])
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2286 ;; (add-menu-button
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2287 ;; '("LaTeX") ["Build TAGS file for multi-file document" bib-etags t])
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2288 ;; (add-menu-button
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2289 ;; '("LaTeX")
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2290 ;; ["Refresh \\cite, \\ref and \\label mouse highlight"
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2291 ;; bib-highlight-mouse t])
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2292
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2293 )
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2294
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2295 ((and (not (string-match "XEmacs\\|Lucid" emacs-version))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2296 (string-equal "19" (substring emacs-version 0 2))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2297 (or window-system
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2298 (fboundp 'tmm-menubar))) ; 19.30 - Will autoload if necessary
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2299 ;;
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2300 ;; emacs-19 under X-windows (or non-X with tmm)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2301 ;;
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2302
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2303 ;; This *almost* makes me want to switch over to XEmacs...
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2304
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2305 ;; to auc-tex auto file for a bibtex buffer
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2306 (eval-after-load
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2307 "bibtex"
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2308 '(progn
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2309 (cond
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2310 ((lookup-key bibtex-mode-map [menu-bar move/edit])
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2311 (define-key-after
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2312 (lookup-key bibtex-mode-map [menu-bar move/edit])
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2313 [bib-nil] '("---" . nil) '"--")
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2314 (define-key-after
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2315 (lookup-key bibtex-mode-map [menu-bar move/edit])
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2316 [bib-apropos] '("Search Apropos" . bib-apropos) 'bib-nil)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2317 (define-key-after
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2318 (lookup-key bibtex-mode-map [menu-bar move/edit])
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2319 [auc-tex-parse]
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2320 '("Create auc-tex auto parsing file" . bib-create-auto-file)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2321 'bib-apropos))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2322 ((lookup-key bibtex-mode-map [menu-bar bibtex-edit])
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2323 (define-key-after
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2324 (lookup-key bibtex-mode-map [menu-bar bibtex-edit])
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2325 [bib-nil] '("---" . nil) '"--")
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2326 (define-key-after
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2327 (lookup-key bibtex-mode-map [menu-bar bibtex-edit])
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2328 [bib-apropos] '("Search Apropos" . bib-apropos) 'bib-nil)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2329 (define-key-after
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2330 (lookup-key bibtex-mode-map [menu-bar bibtex-edit])
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2331 [auc-tex-parse]
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2332 '("Create auc-tex auto parsing file" . bib-create-auto-file)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2333 'bib-apropos)))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2334
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2335 (defvar bib-cite-put-menu-separately t
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2336 "*Put bib-cite menubar menu separately, not within LaTeX pull-down menu")
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2337 (cond
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2338 ((not bib-cite-put-menu-separately) ;Old method - Destroy code?
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2339 (defun bib-add-menu-keys (the-key)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2340 (cond
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2341 (the-key ;make sure keymap exists
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2342 (define-key-after the-key [bib-nil] '("---" . nil) '"--")
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2343 (define-key-after the-key [bib-make-bibliography]
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2344 '("Make BiBTeX bibliography buffer" . bib-make-bibliography)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2345 'bib-nil)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2346 (define-key-after the-key [bib-display]
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2347 '("Display citation or matching \\ref or \\label" . bib-display)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2348 'bib-make-bibliography)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2349 (define-key-after the-key [bib-find]
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2350 '("Find BiBTeX citation or matching \\ref or \\label" . bib-find)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2351 'bib-display)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2352 (define-key-after the-key [bib-apropos]
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2353 '("Search apropos BiBTeX files" . bib-apropos) 'bib-find)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2354 ;;;(put 'ps-print-region-with-faces 'menu-enable 'mark-active)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2355 ;;;(define-key menu-bar-tools-menu [ps-print-buffer]
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2356 ;;; '("Postscript Print Buffer" . ps-print-buffer-with-faces))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2357 (put 'bib-etags 'menu-enable '(bib-master-file))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2358 (define-key-after the-key [bib-etags]
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2359 '("Build TAGS file for multi-file document" . bib-etags)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2360 'bib-apropos)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2361 (define-key-after the-key [bib-highlight-mouse]
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2362 '("Refresh \\cite, \\ref and \\label mouse highlight" .
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2363 bib-highlight-mouse)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2364 'bib-etags))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2365
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2366 ;;for auc-tex's LaTeX-mode
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2367 (eval-after-load
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2368 "latex"
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2369 '(let ((the-key (or (lookup-key LaTeX-mode-map [menu-bar LaTeX])
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2370 (lookup-key LaTeX-mode-map [menu-bar AUC\ TeX]))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2371 ;;;(define-key LaTeX-mode-map [S-mouse-1] 'bib-display-mouse)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2372 ;;;(define-key LaTeX-mode-map [S-mouse-2] 'bib-find-mouse)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2373 (define-key LaTeX-mode-map "\C-cb" bib-cite-map)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2374 (bib-add-menu-keys the-key)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2375
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2376 ;;for auc-tex's TeX-mode
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2377 (eval-after-load
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2378 "tex"
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2379 '(let ((the-key (lookup-key TeX-mode-map [menu-bar TeX])))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2380 ;;;(define-key TeX-mode-map [S-mouse-1] 'bib-display-mouse)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2381 ;;;(define-key TeX-mode-map [S-mouse-2] 'bib-find-mouse)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2382 (define-key TeX-mode-map "\C-cb" bib-cite-map)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2383 (bib-add-menu-keys the-key)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2384
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2385 ;;for plain tex-mode
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2386 (eval-after-load
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2387 "tex-mode"
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2388 '(progn
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2389 (let ((the-key (lookup-key tex-mode-map [menu-bar tex])))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2390 ;;;(define-key tex-mode-map [S-mouse-1] 'bib-display-mouse)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2391 ;;;(define-key tex-mode-map [S-mouse-2] 'bib-find-mouse)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2392 (define-key tex-mode-map "\C-cb" bib-cite-map)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2393 (bib-add-menu-keys the-key)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2394 (define-key tex-mode-map [menu-bar tex bib-etags]
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2395 'undefined)))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2396
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2397 (t ;New method - separate menu
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2398 (setq bib-cite-menu-map (make-sparse-keymap "bib-cite"))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2399 (define-key bib-cite-menu-map [bib-display]
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2400 '("Display citation or matching \\ref or \\label" . bib-display))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2401 (define-key bib-cite-menu-map [bib-find]
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2402 '("Find BiBTeX citation or matching \\ref or \\label" . bib-find))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2403 (define-key bib-cite-menu-map [bib-make-bibliography]
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2404 '("Make BiBTeX bibliography buffer" . bib-make-bibliography))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2405 (put 'bib-etags 'menu-enable '(bib-master-file))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2406 (define-key bib-cite-menu-map [bib-etags]
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2407 '("Build TAGS file for multi-file document" . bib-etags))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2408 (define-key bib-cite-menu-map [bib-apropos]
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2409 '("Search apropos BiBTeX files" . bib-apropos))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2410 (define-key bib-cite-menu-map [bib-highlight-mouse]
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2411 '("Refresh \\cite, \\ref and \\label mouse highlight"
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2412 . bib-highlight-mouse))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2413
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2414 (eval-after-load
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2415 "tex-mode"
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2416 '(progn
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2417 ;;;(define-key tex-mode-map [S-mouse-1] 'bib-display-mouse)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2418 ;;;(define-key tex-mode-map [S-mouse-2] 'bib-find-mouse)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2419 (define-key tex-mode-map "\C-cb" bib-cite-map)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2420 (define-key tex-mode-map [menu-bar bib-cite-menu-map]
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2421 (cons "Bib-Cite" bib-cite-menu-map))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2422 (define-key tex-mode-map [menu-bar bib-cite-menu-map bib-etags]
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2423 'undefined)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2424
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2425 ;;for auc-tex's LaTeX-mode
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2426 (eval-after-load
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2427 "latex"
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2428 '(progn
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2429 ;;;(define-key LaTeX-mode-map [S-mouse-1] 'bib-display-mouse)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2430 ;;;(define-key LaTeX-mode-map [S-mouse-2] 'bib-find-mouse)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2431 (define-key LaTeX-mode-map "\C-cb" bib-cite-map)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2432 (define-key LaTeX-mode-map [menu-bar bib-cite-menu-map]
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2433 (cons "Bib-Cite" bib-cite-menu-map))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2434
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2435 ;;for auc-tex's TeX-mode
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2436 (eval-after-load
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2437 "tex"
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2438 '(progn
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2439 ;;;(define-key TeX-mode-map [S-mouse-1] 'bib-display-mouse)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2440 ;;;(define-key TeX-mode-map [S-mouse-2] 'bib-find-mouse)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2441 (define-key TeX-mode-map "\C-cb" bib-cite-map)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2442 ))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2443
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2444 ;; This must be after adding to LaTeX-mode-map because we copy it here.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2445 (defvar bib-highlight-mouse-keymap
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2446 ;; First, copy the local keymap so we don't have `disappearing' menus
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2447 ;; when the mouse is moved over a \ref, \label or \cite command.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2448 ;; FIXME: **This only works if bib-cite is loaded after TeX keymaps
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2449 ;; are constructed. Thus, if bib-cite is loaded in a hook.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2450
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2451 ;; FIXME: Check out (mouse-major-mode-menu) to see how it grabs the local
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2452 ;; menus to display. Maybe on `highlighted' commands we could only
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2453 ;; display the bib-cite stuff (or a subset of it).
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2454 (let ((m (cond
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2455 ((boundp 'LaTeX-mode-map)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2456 (copy-keymap LaTeX-mode-map))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2457 ((boundp 'tex-mode-map)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2458 (copy-keymap tex-mode-map))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2459 (t
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2460 (make-sparse-keymap)))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2461 (cond
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2462 ((string-match "XEmacs\\|Lucid" emacs-version)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2463 (set-keymap-name m 'bib-highlight-mouse-keymap)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2464 (cond
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2465 ;; action-key stuff from Vladimir Alexiev <vladimir@cs.ualberta.ca>
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2466 ((commandp 'action-key)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2467 ;; for hyperbole. The Right Way is to define implicit buttons
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2468 ;; (defib) bib-cite and label-ref instead of overriding action-key and
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2469 ;; assist key, so that eg smart key help can be obtained, but I'm
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2470 ;; lazy.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2471 (substitute-key-definition 'action-key 'bib-find m global-map)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2472 (substitute-key-definition 'assist-key 'bib-display m global-map)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2473 (substitute-key-definition 'action-key-depress
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2474 'bib-find-mouse m global-map)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2475 (substitute-key-definition 'assist-key-depress
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2476 'bib-display-mouse m global-map)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2477 (substitute-key-definition 'action-mouse-key nil m global-map)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2478 (substitute-key-definition 'assist-mouse-key nil m global-map))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2479 (t ; xemacs, not hyperbole
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2480 (define-key m "\e\r" 'bib-find-mouse) ; bug Fixed in V2.17
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2481 (define-key m "\e\n" 'bib-display-mouse) ;bug Fixed in V2.17
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2482 ;;(define-key m [(shift button1)] 'bib-display-mouse)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2483 (define-key m [button3] 'bib-display-mouse)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2484 (define-key m [button2] 'bib-find-mouse))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2485 (t ; emacs 19
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2486 (cond
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2487 ((commandp 'action-key)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2488 (substitute-key-definition 'action-key 'bib-find m global-map)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2489 (substitute-key-definition 'assist-key 'bib-display m global-map)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2490 (substitute-key-definition 'action-mouse-key-emacs19
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2491 'bib-find-mouse m global-map)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2492 (substitute-key-definition 'assist-mouse-key-emacs19
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2493 'bib-display-mouse m global-map)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2494 (substitute-key-definition 'action-key-depress-emacs19
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2495 nil m global-map)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2496 (substitute-key-definition 'assist-key-depress-emacs19
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2497 nil m global-map))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2498 (t ; emacs 19, not hyperbole
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2499 (define-key m [down-mouse-3] 'bib-display-mouse)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2500 (define-key m [mouse-2] 'bib-find-mouse)))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2501 m))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2502 ;; --------------------------------------------------------------------------
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2503 ;; The following routines are also defined in other packages...
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2504
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2505 ;; Must be in sync with function of same name in ff-paths.el
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2506 (defun psg-checkfor-file-list (filename list)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2507 "Check for presence of FILENAME in directory LIST. Return 1st found path."
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2508 ;;USAGE: (psg-checkfor-file-list "gri.cmd" (psg-list-env "PATH"))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2509 ;;USAGE: (psg-checkfor-file-list "gri-mode.el" load-path)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2510 ;;USAGE: (psg-checkfor-file-list "gri.cmd" (psg-translate-ff-list "gri.tmp"))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2511 (let ((the-list list)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2512 (filespec))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2513 (while the-list
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2514 (if (not (car the-list)) ; it is nil
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2515 (setq filespec (expand-file-name filename "~"))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2516 (setq filespec
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2517 (concat (file-name-as-directory (car the-list)) filename)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2518 (if (file-exists-p filespec)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2519 (setq the-list nil)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2520 (setq filespec nil)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2521 (setq the-list (cdr the-list))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2522 (if filespec
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2523 filespec
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2524 ;; If I have not found a file yet, then check if some directories
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2525 ;; ended in // and recurse through them.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2526 (let ((the-list list))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2527 (while the-list
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2528 (if (not (string-match "//$" (car the-list))) nil
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2529 (setq filespec (car
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2530 (search-directory-tree
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2531 (substring (car the-list) 0 (match-beginning 0))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2532 (concat "^" filename "$")
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2533 t
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2534 t)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2535 (if filespec ;Success!
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2536 (setq the-list nil)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2537 (setq the-list (cdr the-list)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2538 filespec))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2539
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2540
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2541 (defun search-directory-tree (directories extension-regexp recurse first-file)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2542 "Return a list of all reachable files in DIRECTORIES ending with EXTENSION.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2543 DIRECTORIES is a list or a single-directory string
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2544 EXTENSION is actually (any) regexp, usually \\\\.bib$
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2545 If RECURSE is t, then we will recurse into the directory tree,
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2546 nil, we will only search the list given.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2547 If FIRST-FILE is t, stop after first file is found."
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2548 (or (listp directories)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2549 (setq directories (list directories)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2550
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2551 (let (match)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2552 (while directories
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2553 (let* ((directory (file-name-as-directory (car directories)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2554 (content (and directory
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2555 (file-readable-p directory)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2556 (file-directory-p directory)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2557 (directory-files directory))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2558 (setq directories (cdr directories))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2559 (while content
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2560 (let ((file (expand-file-name (car content) directory)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2561 (cond ((string-match "[.]+$" (car content))) ;This or parent dir
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2562 ((not (file-readable-p file)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2563 ((and recurse
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2564 (file-directory-p file))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2565 (setq directories
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2566 (cons (file-name-as-directory file) directories)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2567 ((string-match extension-regexp
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2568 (file-name-nondirectory file))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2569 (and first-file
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2570 (setq content nil
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2571 directories nil))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2572 (setq match (cons file match)))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2573 (setq content (cdr content)))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2574
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2575 match))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2576
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2577 ;;; (defun psg-checkfor-file-list (filename list)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2578 ;;; (let ((the-list list)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2579 ;;; (filespec))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2580 ;;; (while the-list
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2581 ;;; (if (not (car the-list)) ; it is nil
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2582 ;;; (setq filespec (concat "~/" filename))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2583 ;;; (setq filespec
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2584 ;;; (concat (file-name-as-directory (car the-list)) filename)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2585 ;;; (if (file-exists-p filespec)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2586 ;;; (setq the-list nil)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2587 ;;; (setq filespec nil)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2588 ;;; (setq the-list (cdr the-list))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2589 ;;; filespec))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2590
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2591 (or (fboundp 'dired-replace-in-string)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2592 ;; This code is part of GNU emacs
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2593 (defun dired-replace-in-string (regexp newtext string)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2594 ;; Replace REGEXP with NEWTEXT everywhere in STRING and return result.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2595 ;; NEWTEXT is taken literally---no \\DIGIT escapes will be recognized.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2596 (let ((result "") (start 0) mb me)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2597 (while (string-match regexp string start)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2598 (setq mb (match-beginning 0)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2599 me (match-end 0)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2600 result (concat result (substring string start mb) newtext)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2601 start me))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2602 (concat result (substring string start)))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2603
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2604
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2605 ;; Could use fset here to equal TeX-split-string to dired-split if only
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2606 ;; dired-split is defined. That would eliminate a check in psg-list-env.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2607 (and (not (fboundp 'TeX-split-string))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2608 (not (fboundp 'dired-split))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2609 ;; This code is part of auc-tex
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2610 (defun TeX-split-string (char string)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2611 "Returns a list of strings. given REGEXP the STRING is split into
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2612 sections which in string was seperated by REGEXP.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2613
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2614 Examples:
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2615
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2616 (TeX-split-string \"\:\" \"abc:def:ghi\")
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2617 -> (\"abc\" \"def\" \"ghi\")
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2618
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2619 (TeX-split-string \" *\" \"dvips -Plw -p3 -c4 testfile.dvi\")
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2620
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2621 -> (\"dvips\" \"-Plw\" \"-p3\" \"-c4\" \"testfile.dvi\")
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2622
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2623 If CHAR is nil, or \"\", an error will occur."
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2624
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2625 (let ((regexp char)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2626 (start 0)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2627 (result '()))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2628 (while (string-match regexp string start)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2629 (let ((match (string-match regexp string start)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2630 (setq result (cons (substring string start match) result))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2631 (setq start (match-end 0))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2632 (setq result (cons (substring string start nil) result))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2633 (nreverse result))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2634
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2635 ;; Must be in sync with function of same name in ff-paths.el
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2636 ;; (See also PC-include-file-path in standard emacs ditsribution.)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2637 (defun psg-list-env (env)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2638 "Return a list of directory elements in ENVIRONMENT variable (w/o leading $)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2639 argument may consist of environment variable plus a trailing directory, e.g.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2640 HOME or HOME/bin (trailing directory not supported in dos or OS/2).
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2641
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2642 bib-dos-or-os2-variable affects:
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2643 path separator used (: or ;)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2644 whether backslashes are converted to slashes"
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2645 (if (not (getenv env))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2646 nil ;Because dired-replace-in-string fails
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2647 (let* ((value (if bib-dos-or-os2-variable
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2648 (dired-replace-in-string "\\\\" "/" (getenv env))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2649 (getenv env)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2650 (sep-char (or (and bib-dos-or-os2-variable ";") ":"))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2651 (entries (and value
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2652 (or (and (fboundp 'TeX-split-string)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2653 (TeX-split-string sep-char value))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2654 (dired-split sep-char value))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2655 entry
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2656 answers)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2657 (while entries
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2658 (setq entry (car entries))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2659 (setq entries (cdr entries))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2660 (if (file-directory-p entry)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2661 (setq answers (cons entry answers))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2662 (nreverse answers))))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2663
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2664 ;;
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2665 ;; Create the unified hook to call from LaTeX-mode-hook
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2666 ;;
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2667 (defun bib-cite-initialize ()
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2668 ;; Christoph Wedler's <wedler@fmi.uni-passau.de> suggestion for xemacs
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2669 ;; Added for version 2.19
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2670 (if (boundp 'tags-always-exact)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2671 (progn
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2672 (make-local-variable 'tags-always-exact)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2673 (setq tags-always-exact nil)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2674
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2675 ;; Christoph Wedler <wedler@fmi.uni-passau.de>
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2676 (and (boundp 'bib-cite-xemacs-menu)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2677 bib-cite-xemacs-menu
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2678 (fboundp 'add-submenu) ;Insurance for emacs
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2679 ;;;FIXME: I can do this to add a main menu.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2680 ;;(add-submenu nil bib-cite-xemacs-menu)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2681 ;; This makes it buffer-specific so I don't need to remove it.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2682 (set-buffer-menubar (copy-sequence current-menubar))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2683 (add-submenu '("LaTeX") bib-cite-xemacs-menu))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2684
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2685 (cond
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2686 ((string-match "XEmacs\\|Lucid" emacs-version)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2687 ;; Define keys for XEmacs
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2688 ;; Could do all modes like this for emacs also...
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2689 (local-set-key "\C-cba" 'bib-apropos)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2690 (local-set-key "\C-cbm" 'bib-make-bibliography)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2691 (local-set-key "\C-cbd" 'bib-display)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2692 (local-set-key "\C-cbe" 'bib-etags)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2693 (local-set-key "\C-cbf" 'bib-find)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2694 (local-set-key "\C-cbh" 'bib-highlight-mouse)))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2695
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2696 (if bib-highlight-mouse-t
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2697 (bib-highlight-mouse))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2698 (if bib-use-imenu
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2699 (LaTeX-hook-setq-imenu))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2700
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2701 ;; Make sure that imenu-sort-function is nil
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2702 (and (boundp 'imenu-sort-function)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2703 imenu-sort-function
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2704 (make-local-variable 'imenu-sort-function)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2705 (setq imenu-sort-function nil))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2706 )
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2707
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2708 (add-hook 'LaTeX-mode-hook 'bib-cite-initialize t) ;auctex's latex-mode
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2709 (add-hook 'latex-mode-hook 'bib-cite-initialize t) ;emacs' plain latex-mode
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2710
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2711 ;; If bib-cite.el is loaded in a mode hook, bib-highlight-mouse and
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2712 ;; LaTeX-hook-setq-imenu are not called on the buffer...
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2713 ;; so invoke it now for .tex buffers. Same for imenu.
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2714 ;(if (string-match ".tex$" (buffer-name))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2715 ; (bib-cite-initialize))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2716
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2717 (if (or (eq major-mode 'latex-mode)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2718 (eq major-mode 'plain-tex-mode))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2719 (bib-cite-initialize))
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2720
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2721 (provide 'bib-cite)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents:
diff changeset
2722 ;;; bib-cite.el ends here