1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2025-12-14 18:10:32 -08:00

lisp/textmodes/bibtex.el: various small bug fixes

This commit is contained in:
Roland Winkler 2011-06-04 23:58:39 -05:00
parent 022fe7ce8b
commit 004dedd364
2 changed files with 38 additions and 25 deletions

View file

@ -1,3 +1,12 @@
2011-06-05 Roland Winkler <winkler@gnu.org>
* textmodes/bibtex.el (bibtex-generate-url-list): Fix docstring.
(bibtex-insert-kill): After yanking insert newline if necessary.
(bibtex-initialize): Call bibtex-string-files-init only once.
(bibtex-mode): Do not call easy-menu-add.
(bibtex-validate-globally): Use save-excursion in bibtex buffers.
(bibtex-yank): Set arg properly if nil.
2011-06-05 Roland Winkler <winkler@gnu.org> 2011-06-05 Roland Winkler <winkler@gnu.org>
* textmodes/bibtex.el (bibtex-search-entry-globally): New * textmodes/bibtex.el (bibtex-search-entry-globally): New

View file

@ -923,7 +923,7 @@ The following is a complex example, see URL `http://link.aps.org/'.
(((\"journal\" . \"\\\\=<\\(PR[ABCDEL]?\\|RMP\\)\\\\=>\") (((\"journal\" . \"\\\\=<\\(PR[ABCDEL]?\\|RMP\\)\\\\=>\")
\"http://link.aps.org/abstract/%s/v%s/p%s\" \"http://link.aps.org/abstract/%s/v%s/p%s\"
(\"journal\" \".*\" downcase) (\"journal\" \".*\" upcase)
(\"volume\" \".*\" 0) (\"volume\" \".*\" 0)
(\"pages\" \"\\`[A-Z]?[0-9]+\" 0)))" (\"pages\" \"\\`[A-Z]?[0-9]+\" 0)))"
:group 'bibtex :group 'bibtex
@ -1892,6 +1892,9 @@ Optional arg COMMA is as in `bibtex-enclosing-field'."
(push-mark) (push-mark)
(insert (funcall fun 'bibtex-entry-kill-ring-yank-pointer (insert (funcall fun 'bibtex-entry-kill-ring-yank-pointer
bibtex-entry-kill-ring)) bibtex-entry-kill-ring))
;; If we copied an entry from a buffer containing only this one entry,
;; it can be missing the second "\n".
(unless (looking-back "\n\n") (insert "\n"))
(unless (functionp bibtex-reference-keys) (unless (functionp bibtex-reference-keys)
;; update `bibtex-reference-keys' ;; update `bibtex-reference-keys'
(save-excursion (save-excursion
@ -2723,12 +2726,14 @@ When called interactively, FORCE is t, CURRENT is t if current buffer uses
((and (not current) (memq (current-buffer) buffer-list)) ((and (not current) (memq (current-buffer) buffer-list))
(setq buffer-list (delq (current-buffer) buffer-list)))) (setq buffer-list (delq (current-buffer) buffer-list))))
;; parse keys ;; parse keys
(dolist (buffer buffer-list) (let (string-init)
(with-current-buffer buffer (dolist (buffer buffer-list)
(if (or force (functionp bibtex-reference-keys)) (with-current-buffer buffer
(bibtex-parse-keys)) (if (or force (functionp bibtex-reference-keys))
(unless (functionp bibtex-strings) (bibtex-parse-keys))
(bibtex-parse-strings (bibtex-string-files-init))))) (when (or force (functionp bibtex-strings))
(unless string-init (setq string-init (bibtex-string-files-init)))
(bibtex-parse-strings string-init)))))
;; select BibTeX buffer ;; select BibTeX buffer
(if select (if select
(if buffer-list (if buffer-list
@ -3043,10 +3048,7 @@ if that value is non-nil.
bibtex-font-lock-syntactic-keywords)) bibtex-font-lock-syntactic-keywords))
(setq imenu-generic-expression (setq imenu-generic-expression
(list (list nil bibtex-entry-head bibtex-key-in-head)) (list (list nil bibtex-entry-head bibtex-key-in-head))
imenu-case-fold-search t) imenu-case-fold-search t))
;; XEmacs needs `easy-menu-add', Emacs does not care
(easy-menu-add bibtex-edit-menu)
(easy-menu-add bibtex-entry-menu))
(defun bibtex-field-list (entry-type) (defun bibtex-field-list (entry-type)
"Return list of allowed fields for entry ENTRY-TYPE. "Return list of allowed fields for entry ENTRY-TYPE.
@ -3873,20 +3875,21 @@ Return t if test was successful, nil otherwise."
;; Check for duplicate keys within BibTeX buffer ;; Check for duplicate keys within BibTeX buffer
(dolist (buffer buffer-list) (dolist (buffer buffer-list)
(with-current-buffer buffer (with-current-buffer buffer
(let (entry-type key key-list) (save-excursion
(goto-char (point-min)) (let (entry-type key key-list)
(while (re-search-forward bibtex-entry-head nil t) (goto-char (point-min))
(setq entry-type (bibtex-type-in-head) (while (re-search-forward bibtex-entry-head nil t)
key (bibtex-key-in-head)) (setq entry-type (bibtex-type-in-head)
(if (or (and strings (bibtex-string= entry-type "string")) key (bibtex-key-in-head))
(assoc-string entry-type bibtex-entry-field-alist t)) (if (or (and strings (bibtex-string= entry-type "string"))
(if (member key key-list) (assoc-string entry-type bibtex-entry-field-alist t))
(push (format "%s:%d: Duplicate key `%s'\n" (if (member key key-list)
(buffer-file-name) (push (format "%s:%d: Duplicate key `%s'\n"
(bibtex-current-line) key) (buffer-file-name)
error-list) (bibtex-current-line) key)
(push key key-list)))) error-list)
(push (cons buffer key-list) buffer-key-list)))) (push key key-list))))
(push (cons buffer key-list) buffer-key-list)))))
;; Check for duplicate keys among BibTeX buffers ;; Check for duplicate keys among BibTeX buffers
(while (setq current-buf (pop buffer-list)) (while (setq current-buf (pop buffer-list))
@ -4148,6 +4151,7 @@ More precisely, reinsert the field or entry killed or yanked most recently.
With argument N, reinsert the Nth most recently killed BibTeX item. With argument N, reinsert the Nth most recently killed BibTeX item.
See also the command \\[bibtex-yank-pop]." See also the command \\[bibtex-yank-pop]."
(interactive "*p") (interactive "*p")
(unless n (setq n 1))
(bibtex-insert-kill (1- n) t) (bibtex-insert-kill (1- n) t)
(setq this-command 'bibtex-yank)) (setq this-command 'bibtex-yank))