pkg update and first config fix
org-brain not working, add org-roam
This commit is contained in:
@@ -96,6 +96,14 @@ This is mostly for multicites and natbib."
|
||||
:group 'org-ref-faces)
|
||||
|
||||
|
||||
(defcustom org-ref-activate-cite-links t
|
||||
"If non-nil use font-lock to activate citations.
|
||||
In large documents with many citations activation can be slow.
|
||||
Set this to nil to turn that off, which increase performance."
|
||||
:type 'boolean
|
||||
:group 'org-ref)
|
||||
|
||||
|
||||
(defcustom org-ref-default-citation-link
|
||||
"cite"
|
||||
"The default type of citation link to use."
|
||||
@@ -106,9 +114,9 @@ This is mostly for multicites and natbib."
|
||||
(defcustom org-ref-natbib-types
|
||||
'(("cite" "basic citation")
|
||||
("nocite" "add key to bibliography, but do not cite it in the text")
|
||||
("citet" "textual, Jones et al. (1990")
|
||||
("citet" "textual, Jones et al. (1990)")
|
||||
("citet*" "textual, full author list Jones, Baker, and Williams (1990)")
|
||||
("citep" "parenthetical citation (Jones et al. (1990)")
|
||||
("citep" "parenthetical citation (Jones et al. (1990))")
|
||||
("citep*" "parenthetical, full author list, (Jones, Baker, and Williams, 1990)")
|
||||
("citealt" "same as citet, but without parentheses")
|
||||
("citealt*" "same as citet, with full author list but without parentheses")
|
||||
@@ -143,7 +151,7 @@ This is mostly for multicites and natbib."
|
||||
("Parencite" "similar to cite with parentheses and capitalization")
|
||||
("footcite" "Put the citation in a footnote")
|
||||
("footcitetext" "Put the citation in a footnote using \footnotetext")
|
||||
|
||||
|
||||
("textcite" "print the authors or editors as a subject of the sentence")
|
||||
("Textcite" "print the authors or editors as a subject of the sentence with capitalization")
|
||||
("smartcite" "like parencite in a footnote, and footcite in the body")
|
||||
@@ -151,29 +159,29 @@ This is mostly for multicites and natbib."
|
||||
("cite*" "similar to cite, but prints the year or title")
|
||||
("parencite*" "similar to parencite, but prints the year or title")
|
||||
("supercite" "superscripted numeric citation (only in numberic styles)")
|
||||
|
||||
|
||||
("autocite" "handles some punctuation nuances")
|
||||
("Autocite" "handles some punctuation nuances with punctuation")
|
||||
("autocite*" "same as autocite but * is passed to the backend")
|
||||
("Autocite*" "same as Autocite but * is passed to the backend")
|
||||
|
||||
|
||||
("citetitle" "the shorttitle or title field")
|
||||
("citetitle*" "the full title")
|
||||
|
||||
|
||||
("citeyear" "the year field")
|
||||
("citeyear*" "the year field and extradate information if available")
|
||||
|
||||
|
||||
("citedate" "the full date or year")
|
||||
("citedate*" "the full date or year, including extradate information if available")
|
||||
|
||||
|
||||
("citeurl" "the url field")
|
||||
|
||||
|
||||
("fullcite" "create a full citation similar to what is in the bibliography")
|
||||
("footfullcite" "create a full citation as a footnote")
|
||||
;; "volcite" "Volcite" cannot support the syntax
|
||||
("notecite" "print prenote and postnote, but no citation")
|
||||
("Notecite" "print prenote and postnote, but no citation with capitalization")
|
||||
|
||||
|
||||
("pnotecite" "similar to notecite with parentheses")
|
||||
("Pnotecite" "similar to Notecite with parentheses")
|
||||
("fnotecite" "similar to notecite in a footnote"))
|
||||
@@ -256,7 +264,8 @@ This is mostly for multicites and natbib."
|
||||
|
||||
|
||||
(defvar org-ref-citation-key-re
|
||||
(rx "&" (group-n 1 (one-or-more (any word "-.:?!`'/*@+|(){}<>&_^$#%~"))))
|
||||
(rx-to-string
|
||||
'(seq "&" (group-n 1 (one-or-more (any word "-.:?!`'/*@+|(){}<>&_^$#%~")))))
|
||||
"Numbered regular expression for a version 3 cite key.
|
||||
Key is in group 1.
|
||||
Adapted from the expression in org-cite.")
|
||||
@@ -365,7 +374,7 @@ to a path string."
|
||||
"Return a list of valid bibtex keys for this buffer.
|
||||
This is used a lot in `org-ref-cite-activate' so it needs to be
|
||||
fast, but also up to date."
|
||||
|
||||
|
||||
;; this seems to be needed, but we don't want to do this every time
|
||||
(unless bibtex-completion-display-formats-internal
|
||||
(bibtex-completion-init))
|
||||
@@ -376,7 +385,7 @@ fast, but also up to date."
|
||||
collect (assoc file bibtex-completion-cache)))
|
||||
;; We have a cache for each file
|
||||
;; bibtex-completion-cache contains (filename md5hash entries)
|
||||
(cl-loop for entry in
|
||||
(cl-loop for entry in
|
||||
(cl-loop
|
||||
for file in files
|
||||
append (cddr (assoc file bibtex-completion-cache)))
|
||||
@@ -404,100 +413,105 @@ fast, but also up to date."
|
||||
(puthash entry t org-ref-valid-keys-cache))))
|
||||
org-ref-valid-keys-cache)
|
||||
|
||||
|
||||
(defun org-ref-cite-activate (start end path _bracketp)
|
||||
"Activation function for a cite link.
|
||||
START and END are the bounds of the link.
|
||||
PATH has the citations in it."
|
||||
(let* ((valid-keys (org-ref-valid-keys-cached))
|
||||
valid-key
|
||||
substrings)
|
||||
(goto-char start)
|
||||
(pcase (org-ref-cite-version path)
|
||||
(2
|
||||
;; This makes the brackets visible, but we only need it when there is a
|
||||
;; description.
|
||||
(when (looking-at "\\[\\[\\(.*\\)\\]\\[\\(.*\\)\\]\\]")
|
||||
(remove-text-properties start end '(invisible nil)))
|
||||
(setq substrings (split-string path ","))
|
||||
(cl-loop for key in substrings
|
||||
do
|
||||
;; get to the substring
|
||||
(search-forward key end)
|
||||
(put-text-property (match-beginning 0)
|
||||
(match-end 0)
|
||||
'keymap
|
||||
org-ref-cite-keymap)
|
||||
(put-text-property (match-beginning 0)
|
||||
(match-end 0)
|
||||
'cite-key
|
||||
key)
|
||||
(unless (gethash (string-trim key) valid-keys nil)
|
||||
(put-text-property (match-beginning 0)
|
||||
(match-end 0)
|
||||
'face 'org-ref-bad-cite-key-face)
|
||||
(put-text-property (match-beginning 0)
|
||||
(match-end 0)
|
||||
'help-echo "Key not found"))
|
||||
))
|
||||
(3
|
||||
(setq substrings (split-string path ";"))
|
||||
(cl-loop for i from 0 for s in substrings
|
||||
do
|
||||
;; get to the substring
|
||||
(search-forward s end)
|
||||
(put-text-property (match-beginning 0)
|
||||
(match-end 0)
|
||||
'keymap
|
||||
org-ref-cite-keymap)
|
||||
(let* (key-begin
|
||||
key-end
|
||||
key)
|
||||
(when (and org-ref-activate-cite-links
|
||||
;; Try avoid fontifying org-cite elements. this is based on the
|
||||
;; path containing @ which makes it likely to be an org-cite. Maybe
|
||||
;; a text property is better, in case this is an issue in the
|
||||
;; future.
|
||||
(not (s-contains-p "@" path)))
|
||||
(let* ((valid-keys (org-ref-valid-keys))
|
||||
valid-key
|
||||
substrings)
|
||||
(goto-char start)
|
||||
(pcase (org-ref-cite-version path)
|
||||
(2
|
||||
;; This makes the brackets visible, but we only need it when there is a
|
||||
;; description.
|
||||
(when (looking-at "\\[\\[\\(.*\\)\\]\\[\\(.*\\)\\]\\]")
|
||||
(remove-text-properties start end '(invisible nil)))
|
||||
(setq substrings (split-string path ","))
|
||||
(cl-loop for key in substrings
|
||||
do
|
||||
;; get to the substring
|
||||
(search-forward key end)
|
||||
(put-text-property (match-beginning 0)
|
||||
(match-end 0)
|
||||
'keymap
|
||||
org-ref-cite-keymap)
|
||||
(put-text-property (match-beginning 0)
|
||||
(match-end 0)
|
||||
'cite-key
|
||||
key)
|
||||
(unless (member (string-trim key) valid-keys)
|
||||
(put-text-property (match-beginning 0)
|
||||
(match-end 0)
|
||||
'face 'org-ref-bad-cite-key-face)
|
||||
(put-text-property (match-beginning 0)
|
||||
(match-end 0)
|
||||
'help-echo "Key not found"))))
|
||||
(3
|
||||
(setq substrings (split-string path ";"))
|
||||
(cl-loop for i from 0 for s in substrings
|
||||
do
|
||||
;; get to the substring
|
||||
(search-forward s end)
|
||||
(put-text-property (match-beginning 0)
|
||||
(match-end 0)
|
||||
'keymap
|
||||
org-ref-cite-keymap)
|
||||
(let* (key-begin
|
||||
key-end
|
||||
key)
|
||||
|
||||
;; Look for a key. common pre/post notes do not have keys in them.
|
||||
(save-match-data
|
||||
(when (string-match org-ref-citation-key-re s)
|
||||
(setq key (match-string-no-properties 1 s)
|
||||
valid-key (gethash key valid-keys nil)
|
||||
)))
|
||||
;; Look for a key. common pre/post notes do not have keys in them.
|
||||
(save-match-data
|
||||
(when (string-match org-ref-citation-key-re s)
|
||||
(setq key (match-string-no-properties 1 s)
|
||||
valid-key (member key valid-keys))))
|
||||
|
||||
;; these are global prefix/suffixes
|
||||
(when (and (or (= i 0)
|
||||
(= i (- (length substrings) 1)))
|
||||
(null key))
|
||||
(put-text-property (match-beginning 0) (match-end 0)
|
||||
'face 'org-ref-cite-global-prefix/suffix-face)
|
||||
(put-text-property (match-beginning 0) (match-end 0)
|
||||
'help-echo "Global prefix/suffix"))
|
||||
;; these are global prefix/suffixes
|
||||
(when (and (or (= i 0)
|
||||
(= i (- (length substrings) 1)))
|
||||
(null key))
|
||||
(put-text-property (match-beginning 0) (match-end 0)
|
||||
'face 'org-ref-cite-global-prefix/suffix-face)
|
||||
(put-text-property (match-beginning 0) (match-end 0)
|
||||
'help-echo "Global prefix/suffix"))
|
||||
|
||||
;; we have a key. we have to re-search to get its position
|
||||
(when key
|
||||
(save-excursion
|
||||
(save-match-data
|
||||
(search-backward (concat "&" key))
|
||||
(setq key-begin (match-beginning 0)
|
||||
key-end (match-end 0))))
|
||||
;; mark the &
|
||||
(put-text-property key-begin (+ 1 key-begin)
|
||||
'face 'org-ref-cite-&-face)
|
||||
;; store key on the whole thing
|
||||
(put-text-property (match-beginning 0)
|
||||
(match-end 0)
|
||||
'cite-key
|
||||
key)
|
||||
;; we have a key. we have to re-search to get its position
|
||||
(when key
|
||||
(save-excursion
|
||||
(save-match-data
|
||||
(search-backward (concat "&" key))
|
||||
(setq key-begin (match-beginning 0)
|
||||
key-end (match-end 0))))
|
||||
;; mark the &
|
||||
(put-text-property key-begin (+ 1 key-begin)
|
||||
'face 'org-ref-cite-&-face)
|
||||
;; store key on the whole thing
|
||||
(put-text-property (match-beginning 0)
|
||||
(match-end 0)
|
||||
'cite-key
|
||||
key)
|
||||
|
||||
;; fontify any prefix /suffix text
|
||||
(put-text-property (match-beginning 0) key-begin
|
||||
'face 'org-ref-cite-local-prefix/suffix-face)
|
||||
;; fontify any prefix /suffix text
|
||||
(put-text-property (match-beginning 0) key-begin
|
||||
'face 'org-ref-cite-local-prefix/suffix-face)
|
||||
|
||||
(put-text-property key-end (match-end 0)
|
||||
'face 'org-ref-cite-local-prefix/suffix-face)
|
||||
(put-text-property key-end (match-end 0)
|
||||
'face 'org-ref-cite-local-prefix/suffix-face)
|
||||
|
||||
;; bad key activation
|
||||
(unless valid-key
|
||||
(put-text-property key-begin key-end
|
||||
'face 'font-lock-warning-face)
|
||||
(put-text-property key-begin key-end
|
||||
'help-echo "Key not found")))))))))
|
||||
;; bad key activation
|
||||
(unless valid-key
|
||||
(put-text-property key-begin key-end
|
||||
'face 'font-lock-warning-face)
|
||||
(put-text-property key-begin key-end
|
||||
'help-echo "Key not found"))))))))))
|
||||
|
||||
|
||||
;; * Following citation links
|
||||
@@ -632,6 +646,15 @@ Use with apply-partially."
|
||||
("prefix" . ,(if (= 1 (length references))
|
||||
;; single reference
|
||||
(cond
|
||||
;; global and common prefixes exist, combine them
|
||||
((and (plist-get cite :prefix)
|
||||
(plist-get (car references) :prefix))
|
||||
|
||||
(concat "["
|
||||
(plist-get cite :prefix)
|
||||
";" ;; add this back as a separator
|
||||
(plist-get (car references) :prefix)
|
||||
"]"))
|
||||
;; local prefix is not empty, we use it.
|
||||
((plist-get (car references) :prefix)
|
||||
(concat "["
|
||||
@@ -660,7 +683,8 @@ Use with apply-partially."
|
||||
(concat "["
|
||||
(string-trim (plist-get (car references) :prefix))
|
||||
"]"))
|
||||
;; if you have a suffix, you need an empty prefix
|
||||
;; if you get here, the prefix is empty.
|
||||
;; if you have a suffix, you need an empty prefix placeholder
|
||||
((plist-get cite :suffix)
|
||||
"[]")
|
||||
(t
|
||||
@@ -668,15 +692,25 @@ Use with apply-partially."
|
||||
("suffix" . ,(if (= 1 (length references))
|
||||
;; Single reference
|
||||
(cond
|
||||
;; local prefix is not empty, so use it
|
||||
;; local suffix is not empty, so use it
|
||||
((plist-get (car references) :suffix)
|
||||
(format "[%s]"
|
||||
(string-trim (plist-get (car references) :suffix))))
|
||||
;; global prefix is not empty
|
||||
;; global suffix is not empty
|
||||
((plist-get cite :suffix)
|
||||
(format "[%s]" (string-trim (plist-get cite :suffix))))
|
||||
(t
|
||||
""))
|
||||
;; If there is a prefix, then this should
|
||||
;; be an empty bracket, and if not it
|
||||
;; should am empty string. You need an
|
||||
;; empty bracket, at least for biblatex
|
||||
;; commands. With just one set of
|
||||
;; brackets it is interpreted as a
|
||||
;; suffix.
|
||||
(if (or (plist-get cite :prefix)
|
||||
(plist-get (car references) :prefix))
|
||||
"[]"
|
||||
"")))
|
||||
;; Multiple references
|
||||
(cond
|
||||
;; this is a common suffix
|
||||
@@ -786,7 +820,7 @@ Use with apply-partially."
|
||||
|
||||
|
||||
(org-link-set-parameters
|
||||
"bibentry"
|
||||
"bibentry"
|
||||
:complete (apply-partially #'org-ref-cite-link-complete "bibentry")
|
||||
:follow #'org-ref-cite-follow
|
||||
:face 'org-ref-cite-face
|
||||
@@ -874,7 +908,7 @@ arg COMMON, edit the common prefixes instead."
|
||||
(data (org-ref-parse-cite-path (org-element-property :path cite)))
|
||||
prefix suffix
|
||||
(delta 0))
|
||||
|
||||
|
||||
(if (or (null key) common)
|
||||
(progn
|
||||
(setq prefix (read-string "prenote: " (plist-get data :prefix))
|
||||
@@ -883,7 +917,7 @@ arg COMMON, edit the common prefixes instead."
|
||||
|
||||
(plist-put data :prefix (if (string= "" prefix)
|
||||
nil prefix))
|
||||
|
||||
|
||||
(plist-put data :suffix (if (string= "" suffix)
|
||||
nil suffix)))
|
||||
|
||||
@@ -893,7 +927,7 @@ arg COMMON, edit the common prefixes instead."
|
||||
(lambda (el1 key-at-point)
|
||||
(string= key-at-point (plist-get el1 :key))))))
|
||||
;; Pad with spaces after prefix and before suffix
|
||||
(setq prefix (concat
|
||||
(setq prefix (concat
|
||||
(read-string "prenote: "
|
||||
(string-trim
|
||||
(plist-get
|
||||
@@ -914,13 +948,13 @@ arg COMMON, edit the common prefixes instead."
|
||||
(nth index (plist-get data :references))
|
||||
:prefix (if (string= "" prefix)
|
||||
nil prefix))
|
||||
|
||||
|
||||
(plist-put
|
||||
(nth index (plist-get data :references))
|
||||
:suffix (if (string= "" suffix)
|
||||
nil suffix))))
|
||||
|
||||
|
||||
|
||||
|
||||
(setf (buffer-substring (org-element-property :begin cite) (org-element-property :end cite))
|
||||
(format "[[%s:%s]]" type (org-ref-interpret-cite-data data)))
|
||||
|
||||
@@ -1182,7 +1216,10 @@ Rules:
|
||||
(cl-second item))))))
|
||||
(completion-extra-properties `(:annotation-function ,type-annotation)))
|
||||
|
||||
|
||||
(cond
|
||||
((derived-mode-p 'latex-mode)
|
||||
(insert (bibtex-completion-format-citation-cite (list key))))
|
||||
(t
|
||||
(cond
|
||||
;; Not on a link, so we just insert a cite
|
||||
((null (assoc type org-ref-cite-types))
|
||||
@@ -1251,12 +1288,16 @@ Rules:
|
||||
(3 (cl--set-buffer-substring
|
||||
(org-element-property :begin object)
|
||||
(org-element-property :end object)
|
||||
(concat "[[" type ":" (org-ref-interpret-cite-data data) "]]"))))))
|
||||
(concat "[["
|
||||
type ":"
|
||||
(org-ref-interpret-cite-data data)
|
||||
"]]"
|
||||
(make-string (org-element-property :post-blank object) ? )))))))
|
||||
|
||||
;; Now get to the end of the key you just put in.
|
||||
(setq object (org-element-context))
|
||||
(goto-char (org-element-property :end object))
|
||||
(skip-chars-backward " ")))
|
||||
(skip-chars-backward " ")))))
|
||||
|
||||
|
||||
(defun org-ref-insert-cite-keys (keys &optional set-type)
|
||||
|
||||
Reference in New Issue
Block a user