emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
* [PATCH] org-velocity templates
@ 2010-12-06  5:57 Paul M. Rodriguez
  2010-12-06  9:09 ` [Accepted] " Carsten Dominik
  0 siblings, 1 reply; 2+ messages in thread
From: Paul M. Rodriguez @ 2010-12-06  5:57 UTC (permalink / raw)
  To: emacs-orgmode

[-- Attachment #1: Type: text/plain, Size: 124 bytes --]


This patch allows full customization of org-remember or org-capture
templates for use with org-velocity.

Paul Rodriguez.


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: org-velocity.patch --]
[-- Type: text/x-diff, Size: 7701 bytes --]

diff --git a/contrib/lisp/org-velocity.el b/contrib/lisp/org-velocity.el
index 2a1f41b..b3d4006 100644
--- a/contrib/lisp/org-velocity.el
+++ b/contrib/lisp/org-velocity.el
@@ -4,7 +4,7 @@
 
 ;; Author: Paul M. Rodriguez <paulmrodriguez@gmail.com>
 ;; Created: 2010-05-05
-;; Version: 2.2
+;; Version: 2.3
 
 ;; This file is not part of GNU Emacs.
 
@@ -64,8 +64,8 @@
 ;; preferring `org-capture'.  Otherwise the user is simply taken to a
 ;; new heading at the end of the file.
 
-;; Thanks to Richard Riley, Carsten Dominik, and Bastien Guerry for
-;; their suggestions.
+;; Thanks to Richard Riley, Carsten Dominik, Bastien Guerry, and Jeff
+;; Horn for their suggestions.
 
 ;;; Usage:
 ;; (require 'org-velocity)
@@ -125,6 +125,32 @@
   :group 'org-velocity
   :type 'boolean)
 
+(defcustom org-velocity-remember-templates
+  '(("Velocity entry"
+     ?v
+     "* %:search\n\n%i%?"
+     nil
+     bottom))
+  "Use these templates with `org-remember'.
+Meanwhile `org-default-notes-file' is bound to `org-velocity-use-file'.
+The keyword :search inserts the current search.
+See the documentation for `org-remember-templates'."
+  :group 'org-velocity
+  :type (or (get 'org-remember-templates 'custom-type) 'list))
+
+(defcustom org-velocity-capture-templates
+  '(("v"
+     "Velocity entry"
+     entry
+     (file "")
+     "* %:search\n\n%i%?"))
+  "Use these template with `org-capture'.
+Meanwhile `org-default-notes-file' is bound to `org-velocity-use-file'.
+The keyword :search inserts the current search.
+See the documentation for `org-capture-templates'."
+  :group 'org-velocity
+  :type (or (get 'org-capture-templates 'custom-type) 'list))
+
 (defstruct (org-velocity-heading
 	    (:constructor org-velocity-make-heading)
 	    (:type list))
@@ -139,23 +165,39 @@
 	  (number-sequence 65 90)))	;uppercase letters
   "List of chars for indexing results.")
 
+(defconst org-velocity-display-buffer-name "*Velocity headings*")
+
+(defvar org-velocity-search nil
+  "Variable to bind to current search.")
+
+(defsubst org-velocity-buffer-file-name (&optional buffer)
+  "Return the name of the file BUFFER saves to.
+Same as function `buffer-file-name' unless BUFFER is an
+indirect buffer."
+  (buffer-file-name
+   (or (buffer-base-buffer buffer)
+       buffer)))
+
 (defun org-velocity-use-file ()
   "Return the proper file for Org-Velocity to search.
 If `org-velocity-always-use-bucket' is t, use bucket file; complain
 if missing.  Otherwise if this is an Org file, use it."
-  (let ((org-velocity-bucket
-	 (and org-velocity-bucket (expand-file-name org-velocity-bucket))))
-    (if org-velocity-always-use-bucket
-	(or org-velocity-bucket (error "Bucket required but not defined"))
-      (if (and (eq major-mode 'org-mode)
-	       (buffer-file-name))
-	  (buffer-file-name)
-	(or org-velocity-bucket
-	    (error "No bucket and not an Org file"))))))
+  (or
+   ;; In remember and capture buffers the target should be used.
+   (and org-remember-mode org-default-notes-file)
+   (let ((org-velocity-bucket
+	  (and org-velocity-bucket (expand-file-name org-velocity-bucket))))
+     (if org-velocity-always-use-bucket
+	 (or org-velocity-bucket (error "Bucket required but not defined"))
+       (if (and (eq major-mode 'org-mode)
+		(org-velocity-buffer-file-name))
+	   (org-velocity-buffer-file-name)
+	 (or org-velocity-bucket
+	     (error "No bucket and not an Org file")))))))
 
 (defsubst org-velocity-display-buffer ()
   "Return the proper buffer for Org-Velocity to display in."
-  (get-buffer-create "*Velocity headings*"))
+  (get-buffer-create org-velocity-display-buffer-name))
 
 (defsubst org-velocity-bucket-buffer ()
   "Return proper buffer for bucket operations."
@@ -232,29 +274,18 @@ If there is no last heading, return nil."
     'action action))
   (newline))
 
-(defun org-velocity-remember (heading &optional region)
-  "Use `org-remember' to record a note to HEADING.
-If there is a REGION that will be inserted."
+(defun org-velocity-remember ()
+  "Use `org-remember' to record a note."
   (let ((org-remember-templates
-	 (list (list
-		"Velocity entry"
-		?v
-		(format "* %s\n\n%%?%s" heading (or region ""))
-		(org-velocity-use-file)
-		'bottom))))
-    (org-remember nil ?v)))
-
-(defun org-velocity-capture (heading &optional region)
-  "Use `org-capture' to record a note to HEADING.
-If there is a REGION that will be inserted."
+	 org-velocity-remember-templates))
+    (call-interactively 'org-remember)))
+
+(defun org-velocity-capture ()
+  "Use `org-capture' to record a note."
   (let ((org-capture-templates
-	 (list `("v"
-		 "Velocity entry"
-		 entry
-		 (file ,(org-velocity-use-file))
-		 ,(format "* %s\n\n%%?%s" heading (or region ""))))))
+	 org-velocity-capture-templates))
     (if (fboundp 'org-capture) ;; quiet compiler
-     (org-capture nil "v"))))
+	(call-interactively 'org-capture))))
 
 (defun org-velocity-insert-heading (heading)
   "Add a new heading named HEADING."
@@ -265,12 +296,15 @@ If there is a REGION that will be inserted."
     (newline)
     (goto-char (point-max))))
 
-(defun org-velocity-create-heading (search region)
-  "Add and visit a new heading named SEARCH.
-If REGION is non-nil insert as the contents of the heading."
-  (org-velocity-insert-heading search)
-  (switch-to-buffer (org-velocity-bucket-buffer))
-  (when region (insert region)))
+(defun org-velocity-create-heading ()
+  "Add and visit a new heading."
+  (org-store-link nil)
+  (destructuring-bind (&key search initial
+			    &allow-other-keys)
+      org-store-link-plist
+    (org-velocity-insert-heading search)
+    (switch-to-buffer (org-velocity-bucket-buffer))
+    (insert (or initial ""))))
 
 (defun org-velocity-all-search (search)
   "Return entries containing all words in SEARCH."
@@ -327,9 +361,8 @@ If REGION is non-nil insert as the contents of the heading."
      headings)
     (goto-char (point-min))))
 
-(defun org-velocity-create-1 (search region)
-  "Create a new heading named SEARCH.
-If REGION is non-nil insert as contents of new heading.
+(defun org-velocity-create-1 ()
+  "Create a new heading.
 The possible methods are `org-velocity-capture',
 `org-velocity-remember', or `org-velocity-create-heading', in
 that order.  Which is preferred is determined by
@@ -341,23 +374,27 @@ that order.  Which is preferred is determined by
 		  'org-velocity-create-heading))
      (remember (or (and (featurep 'org-remember) 'org-velocity-remember)
 		   'org-velocity-create-heading))
-     (buffer 'org-velocity-create-heading))
-   search region))
+     (buffer 'org-velocity-create-heading))))
+
+(defun org-velocity-store-link ()
+  "Function for `org-store-link-functions'."
+  (if org-velocity-search
+   (org-store-link-props
+    :search org-velocity-search)))
+
+(add-hook 'org-store-link-functions 'org-velocity-store-link)
 
 (defun org-velocity-create (search &optional ask)
   "Create new heading named SEARCH.
 If ASK is non-nil, ask first."
-  (if (or (null ask)
-	  (y-or-n-p "No match found, create? "))
-      ;; if there's a region, we want to insert it
-      (let ((region (if (use-region-p)
-			(buffer-substring
-			 (region-beginning)
-			 (region-end)))))
-	(with-current-buffer (org-velocity-bucket-buffer)
-	 (org-velocity-create-1 search region))
-	(when region (message "%s" "Inserted region"))
-	search)))
+  (when (or (null ask)
+	    (y-or-n-p "No match found, create? "))
+    (let ((org-velocity-search search)
+	  (org-default-notes-file (org-velocity-use-file))
+	  ;; save a stored link
+	  (org-store-link-plist))
+      (org-velocity-create-1))
+    search))
 
 (defun org-velocity-get-matches (search)
   "Return matches for SEARCH in current bucket.

[-- Attachment #3: Type: text/plain, Size: 201 bytes --]

_______________________________________________
Emacs-orgmode mailing list
Please use `Reply All' to send replies to the list.
Emacs-orgmode@gnu.org
http://lists.gnu.org/mailman/listinfo/emacs-orgmode

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

* [Accepted] org-velocity templates
  2010-12-06  5:57 [PATCH] org-velocity templates Paul M. Rodriguez
@ 2010-12-06  9:09 ` Carsten Dominik
  0 siblings, 0 replies; 2+ messages in thread
From: Carsten Dominik @ 2010-12-06  9:09 UTC (permalink / raw)
  To: emacs-orgmode

Patch 442 (http://patchwork.newartisans.com/patch/442/) is now "Accepted".

Maintainer comment: Looks great, thanks

This relates to the following submission:

http://mid.gmane.org/%3C8762v7jvf7.fsf%40gmail.com%3E

Here is the original message containing the patch:

> Content-Type: text/plain; charset="utf-8"
> MIME-Version: 1.0
> Content-Transfer-Encoding: 7bit
> Subject: [Orgmode] org-velocity templates
> Date: Mon, 06 Dec 2010 10:57:00 -0000
> From: Paul M. Rodriguez <paulmrodriguez@gmail.com>
> X-Patchwork-Id: 442
> Message-Id: <8762v7jvf7.fsf@gmail.com>
> To: emacs-orgmode@gnu.org
> 
> This patch allows full customization of org-remember or org-capture
> templates for use with org-velocity.
> 
> Paul Rodriguez.
> 
> 
> diff --git a/contrib/lisp/org-velocity.el b/contrib/lisp/org-velocity.el
> index 2a1f41b..b3d4006 100644
> --- a/contrib/lisp/org-velocity.el
> +++ b/contrib/lisp/org-velocity.el
> @@ -4,7 +4,7 @@
>  
>  ;; Author: Paul M. Rodriguez <paulmrodriguez@gmail.com>
>  ;; Created: 2010-05-05
> -;; Version: 2.2
> +;; Version: 2.3
>  
>  ;; This file is not part of GNU Emacs.
>  
> @@ -64,8 +64,8 @@
>  ;; preferring `org-capture'.  Otherwise the user is simply taken to a
>  ;; new heading at the end of the file.
>  
> -;; Thanks to Richard Riley, Carsten Dominik, and Bastien Guerry for
> -;; their suggestions.
> +;; Thanks to Richard Riley, Carsten Dominik, Bastien Guerry, and Jeff
> +;; Horn for their suggestions.
>  
>  ;;; Usage:
>  ;; (require 'org-velocity)
> @@ -125,6 +125,32 @@
>    :group 'org-velocity
>    :type 'boolean)
>  
> +(defcustom org-velocity-remember-templates
> +  '(("Velocity entry"
> +     ?v
> +     "* %:search\n\n%i%?"
> +     nil
> +     bottom))
> +  "Use these templates with `org-remember'.
> +Meanwhile `org-default-notes-file' is bound to `org-velocity-use-file'.
> +The keyword :search inserts the current search.
> +See the documentation for `org-remember-templates'."
> +  :group 'org-velocity
> +  :type (or (get 'org-remember-templates 'custom-type) 'list))
> +
> +(defcustom org-velocity-capture-templates
> +  '(("v"
> +     "Velocity entry"
> +     entry
> +     (file "")
> +     "* %:search\n\n%i%?"))
> +  "Use these template with `org-capture'.
> +Meanwhile `org-default-notes-file' is bound to `org-velocity-use-file'.
> +The keyword :search inserts the current search.
> +See the documentation for `org-capture-templates'."
> +  :group 'org-velocity
> +  :type (or (get 'org-capture-templates 'custom-type) 'list))
> +
>  (defstruct (org-velocity-heading
>  	    (:constructor org-velocity-make-heading)
>  	    (:type list))
> @@ -139,23 +165,39 @@
>  	  (number-sequence 65 90)))	;uppercase letters
>    "List of chars for indexing results.")
>  
> +(defconst org-velocity-display-buffer-name "*Velocity headings*")
> +
> +(defvar org-velocity-search nil
> +  "Variable to bind to current search.")
> +
> +(defsubst org-velocity-buffer-file-name (&optional buffer)
> +  "Return the name of the file BUFFER saves to.
> +Same as function `buffer-file-name' unless BUFFER is an
> +indirect buffer."
> +  (buffer-file-name
> +   (or (buffer-base-buffer buffer)
> +       buffer)))
> +
>  (defun org-velocity-use-file ()
>    "Return the proper file for Org-Velocity to search.
>  If `org-velocity-always-use-bucket' is t, use bucket file; complain
>  if missing.  Otherwise if this is an Org file, use it."
> -  (let ((org-velocity-bucket
> -	 (and org-velocity-bucket (expand-file-name org-velocity-bucket))))
> -    (if org-velocity-always-use-bucket
> -	(or org-velocity-bucket (error "Bucket required but not defined"))
> -      (if (and (eq major-mode 'org-mode)
> -	       (buffer-file-name))
> -	  (buffer-file-name)
> -	(or org-velocity-bucket
> -	    (error "No bucket and not an Org file"))))))
> +  (or
> +   ;; In remember and capture buffers the target should be used.
> +   (and org-remember-mode org-default-notes-file)
> +   (let ((org-velocity-bucket
> +	  (and org-velocity-bucket (expand-file-name org-velocity-bucket))))
> +     (if org-velocity-always-use-bucket
> +	 (or org-velocity-bucket (error "Bucket required but not defined"))
> +       (if (and (eq major-mode 'org-mode)
> +		(org-velocity-buffer-file-name))
> +	   (org-velocity-buffer-file-name)
> +	 (or org-velocity-bucket
> +	     (error "No bucket and not an Org file")))))))
>  
>  (defsubst org-velocity-display-buffer ()
>    "Return the proper buffer for Org-Velocity to display in."
> -  (get-buffer-create "*Velocity headings*"))
> +  (get-buffer-create org-velocity-display-buffer-name))
>  
>  (defsubst org-velocity-bucket-buffer ()
>    "Return proper buffer for bucket operations."
> @@ -232,29 +274,18 @@ If there is no last heading, return nil."
>      'action action))
>    (newline))
>  
> -(defun org-velocity-remember (heading &optional region)
> -  "Use `org-remember' to record a note to HEADING.
> -If there is a REGION that will be inserted."
> +(defun org-velocity-remember ()
> +  "Use `org-remember' to record a note."
>    (let ((org-remember-templates
> -	 (list (list
> -		"Velocity entry"
> -		?v
> -		(format "* %s\n\n%%?%s" heading (or region ""))
> -		(org-velocity-use-file)
> -		'bottom))))
> -    (org-remember nil ?v)))
> -
> -(defun org-velocity-capture (heading &optional region)
> -  "Use `org-capture' to record a note to HEADING.
> -If there is a REGION that will be inserted."
> +	 org-velocity-remember-templates))
> +    (call-interactively 'org-remember)))
> +
> +(defun org-velocity-capture ()
> +  "Use `org-capture' to record a note."
>    (let ((org-capture-templates
> -	 (list `("v"
> -		 "Velocity entry"
> -		 entry
> -		 (file ,(org-velocity-use-file))
> -		 ,(format "* %s\n\n%%?%s" heading (or region ""))))))
> +	 org-velocity-capture-templates))
>      (if (fboundp 'org-capture) ;; quiet compiler
> -     (org-capture nil "v"))))
> +	(call-interactively 'org-capture))))
>  
>  (defun org-velocity-insert-heading (heading)
>    "Add a new heading named HEADING."
> @@ -265,12 +296,15 @@ If there is a REGION that will be inserted."
>      (newline)
>      (goto-char (point-max))))
>  
> -(defun org-velocity-create-heading (search region)
> -  "Add and visit a new heading named SEARCH.
> -If REGION is non-nil insert as the contents of the heading."
> -  (org-velocity-insert-heading search)
> -  (switch-to-buffer (org-velocity-bucket-buffer))
> -  (when region (insert region)))
> +(defun org-velocity-create-heading ()
> +  "Add and visit a new heading."
> +  (org-store-link nil)
> +  (destructuring-bind (&key search initial
> +			    &allow-other-keys)
> +      org-store-link-plist
> +    (org-velocity-insert-heading search)
> +    (switch-to-buffer (org-velocity-bucket-buffer))
> +    (insert (or initial ""))))
>  
>  (defun org-velocity-all-search (search)
>    "Return entries containing all words in SEARCH."
> @@ -327,9 +361,8 @@ If REGION is non-nil insert as the contents of the heading."
>       headings)
>      (goto-char (point-min))))
>  
> -(defun org-velocity-create-1 (search region)
> -  "Create a new heading named SEARCH.
> -If REGION is non-nil insert as contents of new heading.
> +(defun org-velocity-create-1 ()
> +  "Create a new heading.
>  The possible methods are `org-velocity-capture',
>  `org-velocity-remember', or `org-velocity-create-heading', in
>  that order.  Which is preferred is determined by
> @@ -341,23 +374,27 @@ that order.  Which is preferred is determined by
>  		  'org-velocity-create-heading))
>       (remember (or (and (featurep 'org-remember) 'org-velocity-remember)
>  		   'org-velocity-create-heading))
> -     (buffer 'org-velocity-create-heading))
> -   search region))
> +     (buffer 'org-velocity-create-heading))))
> +
> +(defun org-velocity-store-link ()
> +  "Function for `org-store-link-functions'."
> +  (if org-velocity-search
> +   (org-store-link-props
> +    :search org-velocity-search)))
> +
> +(add-hook 'org-store-link-functions 'org-velocity-store-link)
>  
>  (defun org-velocity-create (search &optional ask)
>    "Create new heading named SEARCH.
>  If ASK is non-nil, ask first."
> -  (if (or (null ask)
> -	  (y-or-n-p "No match found, create? "))
> -      ;; if there's a region, we want to insert it
> -      (let ((region (if (use-region-p)
> -			(buffer-substring
> -			 (region-beginning)
> -			 (region-end)))))
> -	(with-current-buffer (org-velocity-bucket-buffer)
> -	 (org-velocity-create-1 search region))
> -	(when region (message "%s" "Inserted region"))
> -	search)))
> +  (when (or (null ask)
> +	    (y-or-n-p "No match found, create? "))
> +    (let ((org-velocity-search search)
> +	  (org-default-notes-file (org-velocity-use-file))
> +	  ;; save a stored link
> +	  (org-store-link-plist))
> +      (org-velocity-create-1))
> +    search))
>  
>  (defun org-velocity-get-matches (search)
>    "Return matches for SEARCH in current bucket.
> 

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

end of thread, other threads:[~2010-12-06  9:09 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-12-06  5:57 [PATCH] org-velocity templates Paul M. Rodriguez
2010-12-06  9:09 ` [Accepted] " Carsten Dominik

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).