kautz.allegra@btl.CSNET (06/23/87)
Here is some nifty code to help maintain databases compatible with
refer and lookbib. Enjoy!
---- Henry Kautz
:uucp: allegra!kautz
:csnet: kautz%allegra@btl.csnet
:arpa: kautz%allegra%btl.csnet@csnet-relay.arpa
:office phone: (201) 582-2815
;; Bib-Mode
;; GNU Emacs code to help maintain databases compatible with Unix
;; refer and lookbib. The file bib-file should be set to your
;; bibliography file. Keys are automagically inserted as you type,
;; and appropriate keys are presented for various kinds of entries.
;; Copyright 1987 Henry A. Kautz
(setq bib-file "~/abstracts/abstr1987.bib")
(defun addbib ()
"Set up editor to add to bibliography file
specified by global variable bib-file.
Keys automagically inserted. To ignore a key,
just hit return a second time."
(interactive)
(find-file bib-file)
(end-of-buffer)
(text-mode)
(abbrev-mode 1)
(bib-mode 1)
)
(setq bib-mode-on nil)
(defun bib-mode (setting)
"Toggle bib mode. If called from program, SETTING is non-nil to turn on."
(interactive (list (not bib-mode-on)))
(setq bib-mode-on setting)
(if bib-mode-on
(local-set-key "\C-M" 'return-key-bib)
(local-unset-key "\C-M")
)
)
(setq bib-assoc '(
(" *$" . "%A ")
("%A ." . "%A ")
("%A $" . "%T ")
("%T " . "%D ")
("%D " . "%J ")
("%J ." . "%V ")
("%V " . "%N ")
("%N " . "%P ")
("%P " . "%K ")
("%K " . "%X ")
("%X " . "")
("%J $" . "%B ")
("%B ." . "%E ")
("%E ." . "%E ")
("%E $" . "%I ")
("%I " . "%C ")
("%C " . "%P ")
("%B $" . "%R ")
("%R " . "%I ")
))
;; Format of various kinds of references is as follows:
;
; journal papers: a* t d j v n p k x
; articles in books & proceedings: a* t d b e* i c p k x
; tech reports: a* t d r i c k x
; books: a* t d i c k x
(defun bib-find-key (slots)
(cond
((null slots)
(if (bobp)
""
(progn (previous-line 1) (bib-find-key bib-assoc))))
((looking-at (car (car slots)))
(cdr (car slots)))
(t (bib-find-key (cdr slots)))
))
(defun return-key-bib ()
"Magic when user hits return, used by bib-mode"
(interactive)
(if (eolp)
(let (new-key beg-current)
(beginning-of-line)
(setq beg-current (point))
(setq new-key (bib-find-key bib-assoc))
(goto-char beg-current)
(if (looking-at "%. $")
(kill-line nil)
(progn (end-of-line nil) (newline))
)
(insert-string new-key)
)
(newline)
)
)