emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
From: gregory@dynapse.com (Gregory J. Grubbs)
To: emacs-orgmode@gnu.org
Subject: Re: Handling phone calls
Date: Fri, 13 Nov 2009 12:11:17 -0700	[thread overview]
Message-ID: <87ocn6p7e2.fsf@dynapse.com> (raw)
In-Reply-To: 87tzkhoi45.fsf@gollum.intra.norang.ca

Bernt Hansen <bernt@norang.ca> writes:

[non-phone call comments snipped]
> I set up a second set of templates for phone calls:
>
> ,----[ .emacs remember functions ]
> | (setq my-phone-remember-templates
> |       (quote (("client1" ?c "* Phone Call - %:name - %:company\n  :CLOCK-IN:%?" "~/org/client1.org" "Tasks")
> | 	      ("otherclient" ?o "* Phone Call - %:name - %:company\n  :CLOCK-IN:%?" "~/org/otherclient.org" "Tasks")
> | 	      ("norang" ?n "* Phone Call - %:name - %:company\n  :CLOCK-IN:%?" "~/org/norang.org" "Tasks")
> | 	      ("phone call" ?p "* Phone Call - %? - \n  :CLOCK-IN:" "~/org/todo.org" "Tasks"))))
> | 
> | (global-set-key (kbd "<f9> p") 'my-phone-call)
> | 
> | (defun my-phone-call ()
> |   (interactive)
> |   (let ((org-remember-templates my-phone-remember-templates))
> |     (bbdb (read-string "Who is calling: ") nil)
> |     (other-window 1)
> |     (org-remember)))
> | 
> | (add-hook 'remember-mode-hook 'my-start-clock-if-needed)
> | (defun my-start-clock-if-needed ()
> |   (save-excursion
> |     (goto-char (point-min))
> |     (when (re-search-forward ":CLOCK-IN:" nil t)
> |        (replace-match "")
> |        (org-clock-in))))
> | 
> | (require 'remember)
> | (global-set-key (kbd "C-M-r") 'org-remember)
> | (add-hook 'remember-mode-hook 'org-remember-apply-template)
> `----
>
> Thanks Carsten for the my-start-clock-if-needed function which I stole
> off the org-mode mailing list :)
>
> ---
>
> So I'm happily clocking time on some task I'm working on and the phone
> rings...  I pick up the phone, find out who I'm talking to and type
> f9-p and enter a name at the prompt
>
> Who is calling: Joe User
>
> which looks up the person in my bbdb database and fills in the remember
> template then I select the appropriate template for the client org file
> I want to create the task in and it fills in something like this:
>
> ,----[ Remember buffer entry for phone calls ]
> | ## Filing location: Select interactively, default, or last used:
> | ##     C-u C-c C-c  to select file and header location interactively.
> | ##         C-c C-c  "~/org/norang.org" -> "* Tasks"
> | ## C-u C-u C-c C-c  "~/org/client1.org" -> "* Tasks"
> | ## To switch templates, use `C-M-r'.  To abort use `C-c C-k'.
> | 
> | * Phone Call - Joe User - Some Client Company
> |   CLOCK: [2008-02-09 Sat 17:36]
> |   <cursor is here, Start typing notes right away>
> `----
>
> When I'm done with the call C-c C-c stops the clock and files the task
> under * Tasks in whatever file I picked using the template above.
> C-u C-u C-M-r jumps to the task and I can refile it to the appropriate
> spot with C-c C-w.
>
> I'm sure this can be improved upon but it's already a lot better than
> what I had before.
>
> Happy organizing!
>
> -Bernt

Bernt, I have been happily using your phone call templates and the BBDB
integration.  The one thing that was bugging me was when someone calls
who is not in my BBDB database (quite a high percentage, since I don't
make much use of BBDB).  I wanted the prompt to let me quickly enter any
name, and fill in the BBDB content if it was there.  

My revamped template looks like this: 
--8<---------------cut here---------------start------------->8---
(setq my-phone-remember-templates
      (quote (
      ;; ... client templates deleted ... 
      	      ("phone call" ?p "* Phone Call - %(gjg/bbdb-name) - %(gjg/bbdb-company)  %T\n  :CLOCK-IN:+ %?%&" "~/projects/notes.org" "Phone Calls"))))
--8<---------------cut here---------------end--------------->8---

Rather than using the variables for BBDB, I am using custom functions to
return name and company; those will return values from the BBDB record
if it was found, otherwise the name function returns what I entered
at the prompt, and the company function returns the empty string.

--8<---------------cut here---------------start------------->8---
(defvar gjg/remember-phone-record nil
  "Either BBDB record vector, or person's name as a string, or nil")

(defun my-phone-call ()
  (interactive)
  (let* ((org-remember-templates my-phone-remember-templates)
	 (myname (completing-read "Who is calling: " (bbdb-hashtable) 'bbdb-completion-predicate 'confirm))
	 (my-bbdb-name (if (> (length myname) 0) myname nil)))
    (setq gjg/remember-phone-record 
	  (or (first (bbdb-search (bbdb-records) my-bbdb-name nil nil))
	      myname))
    (other-window 1)
    (org-remember)))

(defun gjg/bbdb-name ()
  "Return full name of saved bbdb record, or empty string - for use in Remember templates"
  (if (and gjg/remember-phone-record (vectorp gjg/remember-phone-record))
      (bbdb-record-name gjg/remember-phone-record)
      (or gjg/remember-phone-record "")))

(defun gjg/bbdb-company ()
  "Return company of saved bbdb record, or empty string - for use in Remember templates"
  (if (and gjg/remember-phone-record (vectorp gjg/remember-phone-record))
      (bbdb-record-company gjg/remember-phone-record)
      ""))
--8<---------------cut here---------------end--------------->8---

  parent reply	other threads:[~2009-11-13 19:11 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-02-09 22:55 Handling phone calls Bernt Hansen
2008-02-10  7:42 ` Carsten Dominik
2008-02-10 11:09   ` Bastien
2008-02-24  1:20 ` Nick Dokos
2009-11-13 19:11 ` Gregory J. Grubbs [this message]
2009-11-13 19:28   ` Bernt Hansen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.orgmode.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87ocn6p7e2.fsf@dynapse.com \
    --to=gregory@dynapse.com \
    --cc=emacs-orgmode@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).