emacs-orgmode
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Orgmode] Re: Handling phone calls


From: Gregory J. Grubbs
Subject: [Orgmode] Re: Handling phone calls
Date: Fri, 13 Nov 2009 12:11:17 -0700
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/23.1.50 (gnu/linux)

Bernt Hansen <address@hidden> 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---





reply via email to

[Prev in Thread] Current Thread [Next in Thread]