Function: reftex-offer-bib-menu
reftex-offer-bib-menu is a byte-compiled function defined in
reftex-cite.el.gz.
Signature
(reftex-offer-bib-menu)
Documentation
Offer bib menu and return list of selected items.
Source Code
;; Defined in /usr/src/emacs/lisp/textmodes/reftex-cite.el.gz
(defun reftex-offer-bib-menu ()
"Offer bib menu and return list of selected items."
(let ((bibtype (reftex-bib-or-thebib))
reftex--found-list rtn key data selected-entries)
(while
(not
(catch 'done
;; Scan bibtex files
(setq reftex--found-list
(cond
((eq bibtype 'bib)
; ((assq 'bib (symbol-value reftex-docstruct-symbol))
;; using BibTeX database files.
(reftex-extract-bib-entries (reftex-get-bibfile-list)))
((eq bibtype 'thebib)
; ((assq 'thebib (symbol-value reftex-docstruct-symbol))
;; using thebibliography environment.
(reftex-extract-bib-entries-from-thebibliography
(reftex-uniquify
(mapcar #'cdr
(reftex-all-assq
'thebib (symbol-value reftex-docstruct-symbol))))))
(reftex-default-bibliography
(message "Using default bibliography")
(reftex-extract-bib-entries (reftex-default-bibliography)))
(t (error "No valid bibliography in this document, and no default available"))))
(unless reftex--found-list
(error "Sorry, no matches found"))
;; Remember where we came from
(setq reftex-call-back-to-this-buffer (current-buffer))
(set-marker reftex-select-return-marker (point))
;; Offer selection
(save-window-excursion
(delete-other-windows)
(reftex-kill-buffer "*RefTeX Select*")
(switch-to-buffer-other-window "*RefTeX Select*")
(unless (derived-mode-p 'reftex-select-bib-mode)
(reftex-select-bib-mode))
(let ((inhibit-read-only t))
(erase-buffer)
(reftex-insert-bib-matches reftex--found-list))
(setq buffer-read-only t)
(if (= 0 (buffer-size))
(error "No matches found"))
(setq truncate-lines t)
(goto-char 1)
(while t
(setq rtn
(reftex-select-item
reftex-citation-prompt
reftex-citation-help
reftex-select-bib-mode-map
nil
'reftex-bibtex-selection-callback nil))
(setq key (car rtn)
data (nth 1 rtn))
(unless key (throw 'done t))
(cond
((eq key ?g)
;; Start over
(throw 'done nil))
((eq key ?r)
;; Restrict with new regular expression
(setq reftex--found-list
(reftex-restrict-bib-matches reftex--found-list))
(let ((buffer-read-only nil))
(erase-buffer)
(reftex-insert-bib-matches reftex--found-list))
(goto-char 1))
((eq key ?A)
;; Take all (marked)
(setq selected-entries
(if reftex-select-marked
(mapcar #'car (nreverse reftex-select-marked))
reftex--found-list))
(throw 'done t))
((eq key ?a)
;; Take all (marked), and push the symbol 'concat
(setq selected-entries
(cons 'concat
(if reftex-select-marked
(mapcar #'car (nreverse reftex-select-marked))
reftex--found-list)))
(throw 'done t))
((eq key ?e)
;; Take all (marked), and push the symbol 'concat
(reftex-extract-bib-file reftex--found-list
reftex-select-marked)
(setq selected-entries "BibTeX database file created")
(throw 'done t))
((eq key ?E)
;; Take all (marked), and push the symbol 'concat
(reftex-extract-bib-file reftex--found-list reftex-select-marked
'complement)
(setq selected-entries "BibTeX database file created")
(throw 'done t))
((or (eq key ?\C-m)
(eq key 'return))
;; Take selected
(setq selected-entries
(if reftex-select-marked
(cons 'concat
(mapcar #'car (nreverse reftex-select-marked)))
(if data (list data) nil)))
(throw 'done t))
((stringp key)
;; Got this one with completion
(setq selected-entries key)
(throw 'done t))
(t
(ding))))))))
selected-entries))