emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
* [PATCH 4/4] Add helper functions to org-bibtex
@ 2011-05-01 21:01 Matt Lundin
  2011-05-02 16:29 ` Eric Schulte
  0 siblings, 1 reply; 4+ messages in thread
From: Matt Lundin @ 2011-05-01 21:01 UTC (permalink / raw)
  To: Org Mode

* lisp/org-bibtex.el: (org-bibtex-search): New function.
  (org-bibtex-export-to-kill-ring): New function. Export to kill ring.
  (org-bibtex-create-in-current-entry): New function
  (org-bibtex-create): Make it easier to add bib fields to an
  existing headline
  (org-bibtex-export-arbitrary-fields)
  (org-bibtex-treat-headline-as-title): Fix typos
  (org-bibtex-fleshout): Don't upcase optional field; remove ":" from
  type completion

This patch implements several helper functions: exporting to kill
ring, searching only for entries with bib fields, and creating bib
fields in an existing headline. It makes the UI of org-bibtex-fleshout
more consistent.
---
 lisp/org-bibtex.el |   51 ++++++++++++++++++++++++++++++++++++++++-----------
 1 files changed, 40 insertions(+), 11 deletions(-)

diff --git a/lisp/org-bibtex.el b/lisp/org-bibtex.el
index 513519b..868535d 100644
--- a/lisp/org-bibtex.el
+++ b/lisp/org-bibtex.el
@@ -226,14 +226,14 @@ For example setting to 'BIB_' would allow interoperability with fireforg."
 (defcustom org-bibtex-treat-headline-as-title t
   "Treat headline text as title if title property is absent.
 If an entry is missing a title property, use the headline text as
-the property. If this value is t, `org-bibtex-check` will ignore
+the property. If this value is t, `org-bibtex-check' will ignore
 a missing title field."
   :group 'org-bibtex
   :type 'boolean)
 
 (defcustom org-bibtex-export-arbitrary-fields nil
   "When converting to bibtex allow fields not defined in `org-bibtex-fields'.
-This only has effect if org-bibtex-prefix is defined, so as to
+This only has effect if `org-bibtex-prefix' is defined, so as to
 ensure that other org-properties, such as CATEGORY or LOGGING are
 not placed in the exported bibtex entry."
   :group 'org-bibtex
@@ -385,7 +385,7 @@ This variable is relevant only if `org-bibtex-export-tags-as-keywords` is t."
 With optional argument OPTIONAL, also prompt for optional fields."
   (flet ((val (key lst) (cdr (assoc key lst)))
 	 (keyword (name) (intern (concat ":" (downcase name))))
-         (name (keyword) (upcase (substring (symbol-name keyword) 1))))
+         (name (keyword) (substring (symbol-name keyword) 1)))
     (dolist (field (append
 		    (if org-bibtex-treat-headline-as-title
 			(remove :title (val :required (val type org-bibtex-types)))
@@ -530,22 +530,36 @@ With prefix argument OPTIONAL also prompt for optional fields."
 With prefix argument OPTIONAL also prompt for optional fields."
   (interactive) (org-map-entries (lambda () (org-bibtex-check optional))))
 
-(defun org-bibtex-create (&optional arg)
-  "Create a new entry at the given level."
+(defun org-bibtex-create (&optional arg nonew)
+  "Create a new entry at the given level.
+With a prefix arg, query for optional fields as well.
+If nonew is t, add data to the headline of the entry at point."
   (interactive "P")
   (let* ((type (org-icompleting-read
-		"Type: " (mapcar (lambda (type) (symbol-name (car type)))
-				 org-bibtex-types)))
-	 (type (if (keywordp type) type (intern type))))
+		"Type: " (mapcar (lambda (type) 
+				   (substring (symbol-name (car type)) 1))
+				 org-bibtex-types)
+		nil nil (when nonew (org-bibtex-get "TYPE"))))
+	 (type (if (keywordp type) type (intern (concat ":" type))))
+	 (org-bibtex-treat-headline-as-title (if nonew nil t)))
     (unless (assoc type org-bibtex-types)
       (error "type:%s is not known" type))
-    (org-insert-heading)
-    (let ((title (org-bibtex-ask :title)))
-      (insert title) (org-bibtex-put "TITLE" title))
+    (if nonew 
+	(org-back-to-heading)
+      (org-insert-heading)
+      (let ((title (org-bibtex-ask :title)))
+	(insert title)
+	(org-bibtex-put "TITLE" title)))
     (org-bibtex-put "TYPE" (substring (symbol-name type) 1))
     (org-bibtex-fleshout type arg)
     (mapc (lambda (tag) (org-toggle-tag tag t)) org-bibtex-tags)))
 
+(defun org-bibtex-create-in-current-entry (&optional arg)
+  "Add bibliographical data to the current entry.
+With a prefix arg, query for optional fields."
+  (interactive "P")
+  (org-bibtex-create arg t))
+  
 (defun org-bibtex-read ()
   "Read a bibtex entry and save to `*org-bibtex-entries*'.
 This uses `bibtex-parse-entry'."
@@ -608,6 +622,21 @@ This uses `bibtex-parse-entry'."
 	(org-bibtex-write)
       (error "yanked text does not appear to contain a bibtex entry"))))
 
+(defun org-bibtex-export-to-kill-ring ()
+  "Export current headline to kill ring as bibtex entry."
+  (interactive)
+  (kill-new (org-bibtex-headline)))
+
+(defun org-bibtex-search (string)
+  "Search for bibliographical entries in agenda files.
+This function relies `org-search-view' to locate results."
+  (interactive "sSearch string: ")
+  (let ((org-agenda-overriding-header "Bib search results:")
+        (org-agenda-search-view-always-boolean t))
+    (org-search-view nil 
+		     (format "%s +{:%sTYPE:}"
+			     string org-bibtex-prefix))))
+
 (provide 'org-bibtex)
 
 ;; arch-tag: 83987d5a-01b8-41c7-85bc-77700f1285f5
-- 
1.7.5

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH 4/4] Add helper functions to org-bibtex
  2011-05-01 21:01 [PATCH 4/4] Add helper functions to org-bibtex Matt Lundin
@ 2011-05-02 16:29 ` Eric Schulte
  2011-05-02 17:06   ` Matt Lundin
  0 siblings, 1 reply; 4+ messages in thread
From: Eric Schulte @ 2011-05-02 16:29 UTC (permalink / raw)
  To: Matt Lundin; +Cc: Org Mode

Hi Matt,

Thanks for these patches, they all look great.

I've just applied the first three, however this last patch does not
apply to the current head.  For example the first chunk alters a
variable named `org-bibtex-treat-headline-as-title' which does not exist
in the current git head.  Perhaps you are missing an intervening patch?

Thanks! -- Eric

Matt Lundin <mdl@imapmail.org> writes:

> * lisp/org-bibtex.el: (org-bibtex-search): New function.
>   (org-bibtex-export-to-kill-ring): New function. Export to kill ring.
>   (org-bibtex-create-in-current-entry): New function
>   (org-bibtex-create): Make it easier to add bib fields to an
>   existing headline
>   (org-bibtex-export-arbitrary-fields)
>   (org-bibtex-treat-headline-as-title): Fix typos
>   (org-bibtex-fleshout): Don't upcase optional field; remove ":" from
>   type completion
>
> This patch implements several helper functions: exporting to kill
> ring, searching only for entries with bib fields, and creating bib
> fields in an existing headline. It makes the UI of org-bibtex-fleshout
> more consistent.
> ---
>  lisp/org-bibtex.el |   51 ++++++++++++++++++++++++++++++++++++++++-----------
>  1 files changed, 40 insertions(+), 11 deletions(-)
>
> diff --git a/lisp/org-bibtex.el b/lisp/org-bibtex.el
> index 513519b..868535d 100644
> --- a/lisp/org-bibtex.el
> +++ b/lisp/org-bibtex.el
> @@ -226,14 +226,14 @@ For example setting to 'BIB_' would allow interoperability with fireforg."
>  (defcustom org-bibtex-treat-headline-as-title t
>    "Treat headline text as title if title property is absent.
>  If an entry is missing a title property, use the headline text as
> -the property. If this value is t, `org-bibtex-check` will ignore
> +the property. If this value is t, `org-bibtex-check' will ignore
>  a missing title field."
>    :group 'org-bibtex
>    :type 'boolean)
>  
>  (defcustom org-bibtex-export-arbitrary-fields nil
>    "When converting to bibtex allow fields not defined in `org-bibtex-fields'.
> -This only has effect if org-bibtex-prefix is defined, so as to
> +This only has effect if `org-bibtex-prefix' is defined, so as to
>  ensure that other org-properties, such as CATEGORY or LOGGING are
>  not placed in the exported bibtex entry."
>    :group 'org-bibtex
> @@ -385,7 +385,7 @@ This variable is relevant only if `org-bibtex-export-tags-as-keywords` is t."
>  With optional argument OPTIONAL, also prompt for optional fields."
>    (flet ((val (key lst) (cdr (assoc key lst)))
>  	 (keyword (name) (intern (concat ":" (downcase name))))
> -         (name (keyword) (upcase (substring (symbol-name keyword) 1))))
> +         (name (keyword) (substring (symbol-name keyword) 1)))
>      (dolist (field (append
>  		    (if org-bibtex-treat-headline-as-title
>  			(remove :title (val :required (val type org-bibtex-types)))
> @@ -530,22 +530,36 @@ With prefix argument OPTIONAL also prompt for optional fields."
>  With prefix argument OPTIONAL also prompt for optional fields."
>    (interactive) (org-map-entries (lambda () (org-bibtex-check optional))))
>  
> -(defun org-bibtex-create (&optional arg)
> -  "Create a new entry at the given level."
> +(defun org-bibtex-create (&optional arg nonew)
> +  "Create a new entry at the given level.
> +With a prefix arg, query for optional fields as well.
> +If nonew is t, add data to the headline of the entry at point."
>    (interactive "P")
>    (let* ((type (org-icompleting-read
> -		"Type: " (mapcar (lambda (type) (symbol-name (car type)))
> -				 org-bibtex-types)))
> -	 (type (if (keywordp type) type (intern type))))
> +		"Type: " (mapcar (lambda (type) 
> +				   (substring (symbol-name (car type)) 1))
> +				 org-bibtex-types)
> +		nil nil (when nonew (org-bibtex-get "TYPE"))))
> +	 (type (if (keywordp type) type (intern (concat ":" type))))
> +	 (org-bibtex-treat-headline-as-title (if nonew nil t)))
>      (unless (assoc type org-bibtex-types)
>        (error "type:%s is not known" type))
> -    (org-insert-heading)
> -    (let ((title (org-bibtex-ask :title)))
> -      (insert title) (org-bibtex-put "TITLE" title))
> +    (if nonew 
> +	(org-back-to-heading)
> +      (org-insert-heading)
> +      (let ((title (org-bibtex-ask :title)))
> +	(insert title)
> +	(org-bibtex-put "TITLE" title)))
>      (org-bibtex-put "TYPE" (substring (symbol-name type) 1))
>      (org-bibtex-fleshout type arg)
>      (mapc (lambda (tag) (org-toggle-tag tag t)) org-bibtex-tags)))
>  
> +(defun org-bibtex-create-in-current-entry (&optional arg)
> +  "Add bibliographical data to the current entry.
> +With a prefix arg, query for optional fields."
> +  (interactive "P")
> +  (org-bibtex-create arg t))
> +  
>  (defun org-bibtex-read ()
>    "Read a bibtex entry and save to `*org-bibtex-entries*'.
>  This uses `bibtex-parse-entry'."
> @@ -608,6 +622,21 @@ This uses `bibtex-parse-entry'."
>  	(org-bibtex-write)
>        (error "yanked text does not appear to contain a bibtex entry"))))
>  
> +(defun org-bibtex-export-to-kill-ring ()
> +  "Export current headline to kill ring as bibtex entry."
> +  (interactive)
> +  (kill-new (org-bibtex-headline)))
> +
> +(defun org-bibtex-search (string)
> +  "Search for bibliographical entries in agenda files.
> +This function relies `org-search-view' to locate results."
> +  (interactive "sSearch string: ")
> +  (let ((org-agenda-overriding-header "Bib search results:")
> +        (org-agenda-search-view-always-boolean t))
> +    (org-search-view nil 
> +		     (format "%s +{:%sTYPE:}"
> +			     string org-bibtex-prefix))))
> +
>  (provide 'org-bibtex)
>  
>  ;; arch-tag: 83987d5a-01b8-41c7-85bc-77700f1285f5

-- 
Eric Schulte
http://cs.unm.edu/~eschulte/

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH 4/4] Add helper functions to org-bibtex
  2011-05-02 16:29 ` Eric Schulte
@ 2011-05-02 17:06   ` Matt Lundin
  2011-05-02 17:24     ` Eric Schulte
  0 siblings, 1 reply; 4+ messages in thread
From: Matt Lundin @ 2011-05-02 17:06 UTC (permalink / raw)
  To: Eric Schulte; +Cc: Org Mode

Hi Eric,

"Eric Schulte" <schulte.eric@gmail.com> writes:

> Hi Matt,
>
> Thanks for these patches, they all look great.

Thanks for applying them. I'm really excited about this new
functionality; it's exactly what I had been looking for. 

Thanks for implementing it in the first place!

>
> I've just applied the first three, however this last patch does not
> apply to the current head.  For example the first chunk alters a
> variable named `org-bibtex-treat-headline-as-title' which does not exist
> in the current git head.  Perhaps you are missing an intervening patch?

Sorry. It was against an earlier patch I had sent but forgot to cc you
on:

http://patchwork.newartisans.com/patch/773/

Best,
Matt

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH 4/4] Add helper functions to org-bibtex
  2011-05-02 17:06   ` Matt Lundin
@ 2011-05-02 17:24     ` Eric Schulte
  0 siblings, 0 replies; 4+ messages in thread
From: Eric Schulte @ 2011-05-02 17:24 UTC (permalink / raw)
  To: Matt Lundin; +Cc: Org Mode

Hi Matt,

These last two patches are now applied.  Many Thanks.

Now I just have to figure out how to use tags, so I can organize my
reading by tag/keyword...

Cheers -- Eric

Matt Lundin <mdl@imapmail.org> writes:

> Hi Eric,
>
> "Eric Schulte" <schulte.eric@gmail.com> writes:
>
>> Hi Matt,
>>
>> Thanks for these patches, they all look great.
>
> Thanks for applying them. I'm really excited about this new
> functionality; it's exactly what I had been looking for. 
>
> Thanks for implementing it in the first place!
>
>>
>> I've just applied the first three, however this last patch does not
>> apply to the current head.  For example the first chunk alters a
>> variable named `org-bibtex-treat-headline-as-title' which does not exist
>> in the current git head.  Perhaps you are missing an intervening patch?
>
> Sorry. It was against an earlier patch I had sent but forgot to cc you
> on:
>
> http://patchwork.newartisans.com/patch/773/
>
> Best,
> Matt
>

-- 
Eric Schulte
http://cs.unm.edu/~eschulte/

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2011-05-02 17:26 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-05-01 21:01 [PATCH 4/4] Add helper functions to org-bibtex Matt Lundin
2011-05-02 16:29 ` Eric Schulte
2011-05-02 17:06   ` Matt Lundin
2011-05-02 17:24     ` Eric Schulte

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).