diff options
author | Kyle Meyer <kyle@kyleam.com> | 2014-10-29 21:38:19 -0400 |
---|---|---|
committer | Kyle Meyer <kyle@kyleam.com> | 2014-10-29 21:38:19 -0400 |
commit | 08d71bf1b687f6cd9be78489369a8e276714f808 (patch) | |
tree | 0dd3c037639652c3c84f5412da5fc84a2c5a96cf | |
parent | 3dcb4aa8b0546b1ac397f14c289952cc1d73eeb0 (diff) | |
download | bog-08d71bf1b687f6cd9be78489369a8e276714f808.tar.gz |
Fix bog-citekey-at-point for hyphenated citekeys
Because bog-citekey-at-point used "(thing-at-point 'word)", it didn't
handle hyphenated citekeys properly.
Now the function relies on a set of characters that are allowed to
precede citekeys.
-rw-r--r-- | bog-tests.el | 29 | ||||
-rw-r--r-- | bog.el | 23 |
2 files changed, 47 insertions, 5 deletions
diff --git a/bog-tests.el b/bog-tests.el index 6a261f4..c1c98a2 100644 --- a/bog-tests.el +++ b/bog-tests.el @@ -41,13 +41,40 @@ ;; `bog-citekey-at-point' -(ert-deftest bog-citekey-at-point () +(ert-deftest bog-citekey-at-point-bob () (let ((citekey "name2010word")) (with-temp-buffer (insert citekey) (goto-char (point-min)) (should (equal (bog-citekey-at-point) citekey))))) +(ert-deftest bog-citekey-at-point-newline () + (let ((citekey "name2010word")) + (with-temp-buffer + (insert "\n" citekey) + (should (equal (bog-citekey-at-point) citekey))))) + +(ert-deftest bog-citekey-at-point-parens () + (let ((citekey "name2010word")) + (with-temp-buffer + (insert "\n(" citekey ")") + (backward-char 2) + (should (equal (bog-citekey-at-point) citekey))))) + +(ert-deftest bog-citekey-at-point-spaces () + (let ((citekey "name2010word")) + (with-temp-buffer + (insert "\n " citekey " ") + (backward-char 2) + (should (equal (bog-citekey-at-point) citekey))))) + +(ert-deftest bog-citekey-at-point-with-hyphen () + (let ((citekey "hyphen-name2010word")) + (with-temp-buffer + (insert citekey) + (goto-char (point-min)) + (should (equal (bog-citekey-at-point) citekey))))) + ;; `bog-citekey-from-tree' (ert-deftest bog-citekey-from-heading-title-current-level () @@ -73,6 +73,15 @@ settings: :group 'bog :type 'string) +(defcustom bog-allowed-before-citekey + "\\(\n\\|\\s-\\|(\\|\\[\\|{\\|<\\|,\\)" + "Regex that specifies characters allowed before a citekey. +This may need to be modified if you have a custom +`bog-citekey-format' or if you tend to used a certain character +before citekeys that isn't included above." + :group 'bog + :type 'string) + (defcustom bog-citekey-property "CUSTOM_ID" "Property name used to store citekey. The default corresponds to the default value of @@ -241,10 +250,16 @@ year, and the first meaningful word in the title)." groups delim))) (defun bog-citekey-at-point () - (let ((maybe-citekey (thing-at-point 'word))) - (when (and maybe-citekey - (bog-citekey-p maybe-citekey)) - (substring-no-properties maybe-citekey)))) + "Return citekey at point. +The citekey must have the format specified by +`bog-citekey-format' and, if not at the beginning of the buffer, +be preceded by a characters in `bog-allowed-before-citekey'." + (save-excursion + (unless (bobp) + (re-search-backward bog-allowed-before-citekey) + (forward-char 1)) + (when (looking-at bog-citekey-format) + (match-string-no-properties 0)))) (defun bog-citekey-from-notes () "Get the citekey from the context of the Org file." |