bibtex-string-file-path and bibtex-file-path are lists of directories
* lisp/textmodes/bibtex.el (bibtex-string-file-path, bibtex-file-path): These user options are now lists of directories. For backward compatibility, the old, obsolete format is still supported. (bibtex-string-files-init, bibtex-initialize): Change accordingly. Use file-name-extension and file-name-with-extension. * etc/NEWS: Entry for new format of bibtex-string-file-path and bibtex-file-path.
This commit is contained in:
parent
99b85e116f
commit
14b5ba7c61
2 changed files with 69 additions and 46 deletions
5
etc/NEWS
5
etc/NEWS
|
@ -826,6 +826,11 @@ Use 'bibtex-aux-opt-alist' instead.
|
|||
*** New user option 'bibtex-entry-ask-for-key'.
|
||||
When enabled, 'bibtex-entry' asks for a key.
|
||||
|
||||
---
|
||||
*** 'bibtex-string-file-path' and 'bibtex-file-path' are lists of directories.
|
||||
For backward compatibility, considered obsolete, these user options
|
||||
may still be strings with colon separated lists of directories.
|
||||
|
||||
** Midnight mode
|
||||
|
||||
---
|
||||
|
|
|
@ -1095,13 +1095,16 @@ to the directories specified in `bibtex-string-file-path'."
|
|||
:group 'bibtex
|
||||
:type '(repeat file))
|
||||
|
||||
(defcustom bibtex-string-file-path (getenv "BIBINPUTS")
|
||||
"Colon-separated list of paths to search for `bibtex-string-files'.
|
||||
Initialized from the BIBINPUTS environment variable."
|
||||
(defcustom bibtex-string-file-path (split-string (getenv "BIBINPUTS") ":+" t)
|
||||
"List of directories to search for `bibtex-string-files'.
|
||||
By default, initialized from the BIBINPUTS environment variable.
|
||||
For backward compatibility, considered obsolete, it may also be
|
||||
a single string with a colon separated list of directories."
|
||||
:group 'bibtex
|
||||
:version "27.1"
|
||||
:type '(choice string
|
||||
(const :tag "Not Set" nil)))
|
||||
:version "31.1"
|
||||
:type '(choice (repeat directory)
|
||||
(string :tag "String (obsolete)")
|
||||
(const :tag "Not set" nil)))
|
||||
|
||||
(defcustom bibtex-files nil
|
||||
"List of BibTeX files that are searched for entry keys.
|
||||
|
@ -1114,13 +1117,16 @@ See also `bibtex-search-entry-globally'."
|
|||
:type '(repeat (choice (const :tag "bibtex-file-path" bibtex-file-path)
|
||||
directory file)))
|
||||
|
||||
(defcustom bibtex-file-path (getenv "BIBINPUTS")
|
||||
"Colon separated list of paths to search for `bibtex-files'.
|
||||
Initialized from the BIBINPUTS environment variable."
|
||||
(defcustom bibtex-file-path (split-string (getenv "BIBINPUTS") ":+" t)
|
||||
"List of directories to search for `bibtex-files'.
|
||||
By default, initialized from the BIBINPUTS environment variable.
|
||||
For backward compatibility, considered obsolete, it may also be
|
||||
a single string with a colon separated list of directories."
|
||||
:group 'bibtex
|
||||
:version "27.1"
|
||||
:type '(choice string
|
||||
(const :tag "Not Set" nil)))
|
||||
:version "31.1"
|
||||
:type '(choice (repeat directory)
|
||||
(string :tag "String (obsolete)")
|
||||
(const :tag "Not set" nil)))
|
||||
|
||||
(defcustom bibtex-search-entry-globally nil
|
||||
"If non-nil, interactive calls of `bibtex-search-entry' search globally.
|
||||
|
@ -3195,30 +3201,35 @@ Return alist of strings if parsing was completed, `aborted' otherwise."
|
|||
|
||||
(defun bibtex-string-files-init ()
|
||||
"Return initialization for `bibtex-strings'.
|
||||
Use `bibtex-predefined-strings' and BibTeX files `bibtex-string-files'."
|
||||
(save-match-data
|
||||
(let ((dirlist (split-string (or bibtex-string-file-path default-directory)
|
||||
":+"))
|
||||
(case-fold-search)
|
||||
string-files fullfilename compl bounds found)
|
||||
;; collect absolute file names of valid string files
|
||||
(dolist (filename bibtex-string-files)
|
||||
(unless (string-match "\\.bib\\'" filename)
|
||||
(setq filename (concat filename ".bib")))
|
||||
;; test filenames
|
||||
(if (file-name-absolute-p filename)
|
||||
(if (file-readable-p filename)
|
||||
(push filename string-files)
|
||||
(user-error "BibTeX strings file %s not found" filename))
|
||||
Use `bibtex-predefined-strings' and BibTeX files `bibtex-string-files'
|
||||
with `bibtex-string-file-path'."
|
||||
(let ((dirlist
|
||||
(or (if (stringp bibtex-string-file-path) ; obsolete format
|
||||
(save-match-data
|
||||
(split-string bibtex-string-file-path ":+" t))
|
||||
bibtex-string-file-path)
|
||||
(list default-directory)))
|
||||
string-files)
|
||||
;; collect absolute file names of valid string files
|
||||
(dolist (filename bibtex-string-files)
|
||||
(unless (string= "bib" (file-name-extension filename))
|
||||
(setq filename (file-name-with-extension filename "bib")))
|
||||
;; test filenames
|
||||
(if (file-name-absolute-p filename)
|
||||
(if (file-readable-p filename)
|
||||
(push filename string-files)
|
||||
(user-error "BibTeX strings file %s not found" filename))
|
||||
(let (found)
|
||||
(dolist (dir dirlist)
|
||||
(when (file-readable-p
|
||||
(setq fullfilename (expand-file-name filename dir)))
|
||||
(push fullfilename string-files)
|
||||
(setq found t)))
|
||||
;; filename may exist in multiple directories
|
||||
(let ((fullfilename (expand-file-name filename dir)))
|
||||
(when (file-readable-p fullfilename)
|
||||
(push fullfilename string-files)
|
||||
(setq found t))))
|
||||
(unless found
|
||||
(user-error "File %s not in paths defined via bibtex-string-file-path"
|
||||
filename))))
|
||||
;; parse string files
|
||||
(user-error "File %s not in bibtex-string-file-path" filename)))))
|
||||
;; parse string files
|
||||
(let (compl bounds)
|
||||
(dolist (filename string-files)
|
||||
(with-temp-buffer
|
||||
(insert-file-contents filename)
|
||||
|
@ -3270,9 +3281,20 @@ already set. If SELECT is non-nil interactively select a BibTeX buffer.
|
|||
When called interactively, FORCE is t, CURRENT is t if current buffer
|
||||
visits a file using `bibtex-mode', and SELECT is t if current buffer
|
||||
does not use `bibtex-mode'."
|
||||
(interactive (list (eq major-mode 'bibtex-mode) t
|
||||
;; Interactively, exclude current buffer if it does not visit a file
|
||||
;; using `bibtex-mode'. This way, we exclude BibTeX buffers such as
|
||||
;; `bibtex-search-buffer' that are not visiting a BibTeX file.
|
||||
;; Also, calling `bibtex-initialize' gives meaningful results for any
|
||||
;; current buffer.
|
||||
(interactive (list (eq major-mode 'bibtex-mode)
|
||||
(and buffer-file-name (eq major-mode 'bibtex-mode))
|
||||
(not (eq major-mode 'bibtex-mode))))
|
||||
(let ((file-path (split-string (or bibtex-file-path default-directory) ":+"))
|
||||
(let ((file-path
|
||||
(or (if (stringp bibtex-file-path) ; obsolete format
|
||||
(save-match-data
|
||||
(split-string bibtex-file-path ":+" t))
|
||||
bibtex-file-path)
|
||||
(list default-directory)))
|
||||
file-list dir-list buffer-list)
|
||||
;; generate list of BibTeX files
|
||||
(dolist (file bibtex-files)
|
||||
|
@ -3280,20 +3302,20 @@ does not use `bibtex-mode'."
|
|||
(setq dir-list (append dir-list file-path)))
|
||||
((file-accessible-directory-p file)
|
||||
(push file dir-list))
|
||||
((progn (unless (string-match "\\.bib\\'" file)
|
||||
(setq file (concat file ".bib")))
|
||||
((progn (unless (string= "bib" (file-name-extension file))
|
||||
(setq file (file-name-with-extension file "bib")))
|
||||
(file-name-absolute-p file))
|
||||
(push file file-list))
|
||||
(t
|
||||
(let (expanded-file-name found)
|
||||
(dolist (dir file-path)
|
||||
;; filename may exist in multiple directories
|
||||
(when (file-readable-p
|
||||
(setq expanded-file-name (expand-file-name file dir)))
|
||||
(push expanded-file-name file-list)
|
||||
(setq found t)))
|
||||
(unless found
|
||||
(user-error "File `%s' not in paths defined via bibtex-file-path"
|
||||
file))))))
|
||||
(user-error "File `%s' not in bibtex-file-path" file))))))
|
||||
(dolist (file file-list)
|
||||
(unless (file-readable-p file)
|
||||
(user-error "BibTeX file `%s' not found" file)))
|
||||
|
@ -3307,12 +3329,6 @@ does not use `bibtex-mode'."
|
|||
(if (file-readable-p file)
|
||||
(push (find-file-noselect file) buffer-list)))
|
||||
;; Include current buffer iff we want it.
|
||||
;; Exclude current buffer if it does not visit a file using `bibtex-mode'.
|
||||
;; This way we exclude BibTeX buffers such as `bibtex-search-buffer'
|
||||
;; that are not visiting a BibTeX file. Also, calling `bibtex-initialize'
|
||||
;; gives meaningful results for any current buffer.
|
||||
(unless (and current (eq major-mode 'bibtex-mode) buffer-file-name)
|
||||
(setq current nil))
|
||||
(cond ((and current (not (memq (current-buffer) buffer-list)))
|
||||
(push (current-buffer) buffer-list))
|
||||
((and (not current) (memq (current-buffer) buffer-list))
|
||||
|
@ -3321,6 +3337,8 @@ does not use `bibtex-mode'."
|
|||
(let (string-init)
|
||||
(dolist (buffer buffer-list)
|
||||
(with-current-buffer buffer
|
||||
;; `bibtex-reference-keys' and `bibtex-strings' are buffer-local
|
||||
;; lazy completion tables. So we only initiate them as needed.
|
||||
(if (or force (functionp bibtex-reference-keys))
|
||||
(bibtex-parse-keys))
|
||||
(when (or force (functionp bibtex-strings))
|
||||
|
|
Loading…
Add table
Reference in a new issue