;;; planner-init.el --- Initialize Planner

;; This file is part of Michael Olson's Emacs settings.

;; The code in this file may be used, distributed, and modified
;; without restriction.

;; I use initsplit.el to separate customize settings on a per-project
;; basis.

;; Add working directories to load path
(add-to-list 'load-path "/home/mwolson/proj/emacs/planner/git-planner")
(add-to-list 'load-path "/home/mwolson/proj/emacs/remember/git-remember" t)

;; I want my own project name
(setq planner-project "_Plans")

;; Initialize
(require 'appt)
(require 'planner)

(require 'planner-bbdb)
(require 'planner-deadline)
(require 'planner-diary)
(eval-after-load "erc"
  '(progn
     (require 'planner-erc)))
(eval-after-load "gnus"
  '(progn
     (require 'planner-gnus)))
(require 'planner-id)
;(require 'planner-multi)
(require 'planner-notes-index)
(require 'planner-publish)
(require 'remember-planner)
(require 'solar)

;; Define diary-opening function before binding it
(defun my-diary-open ()
  "Open the diary file."
  (interactive)
  (find-file-other-window
   (substitute-in-file-name diary-file)))

;; Insinuate planner into various other packages
(planner-calendar-insinuate)
(planner-diary-insinuate)

;; Do these when entering planner mode
(defun my-planner-goto-stuff ()
  "My own planner stuff.  Prohibit modes we don't want here."
  (auto-fill-mode -1)
  (flyspell-mode-off))
(add-hook 'planner-mode-hook 'my-planner-goto-stuff)

;; Get sunrise and sunset times as a string
(defun my-planner-get-sunrise-sunset ()
  "Retrieve the sunrise and sunset info for the current day."
  (save-match-data
    (let ((date (planner-page-name)))
      (setq date (when (string-match planner-date-regexp date)
                   (planner-filename-to-calendar-date date)))
      (when date
        (save-excursion
          (when (re-search-forward "^\\* Sunrise and sunset$" nil t)
            (forward-line 1)
            (let ((beg (point)))
              (re-search-forward "^\\* " nil 0)
              (forward-line -1)
              (delete-region beg (point))
              (setq date (solar-sunrise-sunset date))
              (insert "\n - Sunrise: " (apply 'solar-time-string (nth 0 date))
                      "\n - Sunset : " (apply 'solar-time-string (nth 1 date))
                      "\n - Hours daylight: " (nth 2 date) "\n"))))))))
(add-hook 'planner-goto-hook 'my-planner-get-sunrise-sunset)

;; Cause deadlines to be updated
(add-hook 'planner-goto-hook 'planner-deadline-update)

;; Initialize appt
;; (if (and (not (featurep 'xemacs))
;;          (fboundp 'appt-activate))
;;     (appt-activate 1)
;;   (appt-initialize)
;;   (display-time))

;;; Key customizations

;; Use some extra keybindings (that should be default)
(planner-install-extra-context-keybindings)
(planner-install-extra-task-keybindings)
(planner-install-extra-note-keybindings)

;; Don't clobber C-c C-t
(define-key planner-mode-map "\C-c\C-t" #'muse-publish-this-file)

;; The following key bindings are an attempt to make planner stuff
;; globally accessible.
;;(global-set-key "\C-cp"  nil)
(global-set-key                         ; insert A-level task
 "\C-cpa" 'planner-create-high-priority-task-from-buffer)

(global-set-key                         ; insert B-level task
 "\C-cpb" 'planner-create-medium-priority-task-from-buffer)
(global-set-key                         ; insert C-level task
 "\C-cpc" 'planner-create-low-priority-task-from-buffer)
(global-set-key "\C-cpd"                ; insert diary entry
                'calendar)
(global-set-key "\C-cpe"                ; change deadline
                'planner-deadline-change)
(global-set-key "\C-cpk" 'planner-annotation-as-kill)
;;(global-set-key "\C-cpn" 'remember)     ; insert note
(global-set-key "\C-cpo"                ; open diary
                'my-diary-open)
(global-set-key "\C-cp\C-s"             ; search notes
                'planner-search-notes)

;;; Customizations

(custom-set-variables
 '(appt-display-format (quote window))
 '(calendar-latitude [34 5 north])
 '(calendar-location-name "West Hollywood, CA")
 '(calendar-longitude [118 21 west])
 '(calendar-time-display-form (quote (24-hours ":" minutes (if time-zone " (") time-zone (if time-zone ")"))))
 '(diary-display-function (quote (fancy-diary-display)))
 '(diary-file "~/.emacs.d/diary")
 '(planner-annotation-functions (quote (planner-gnus-annotation planner-erc-annotation-from-erc planner-bbdb-annotation-from-bbdb planner-annotation-from-info planner-annotation-from-dired)))
 '(planner-annotation-strip-directory t)
 '(planner-carry-tasks-forward 7)
 '(planner-custom-variables (quote ((emacs-wiki-project-server-prefix . "../plans/"))))
 '(planner-day-page-template "* Diary

* Sunrise and sunset

* Tasks

* Notes")
 '(planner-default-task-priority "B")
 '(planner-diary-appts-file "~/.emacs.d/diary")
 '(planner-diary-appts-number-of-days 7)
 '(planner-diary-cal-desk-file "~/.emacs.d/diary")
 '(planner-diary-cal-desk-number-of-days 7)
 '(planner-diary-exclude-appts-from-diary t)
 '(planner-diary-file "~/.emacs.d/diary")
 '(planner-diary-number-of-days 7)
 '(planner-diary-private-file "~/.emacs.d/diary")
 '(planner-diary-public-file "~/.emacs.d/diary")
 '(planner-diary-use-appts nil)
 '(planner-diary-use-cal-desk nil)
 '(planner-diary-use-diary t)
 '(planner-id-tracking-file "~/.emacs.d/.planner-id")
 '(planner-id-update-automatically t)
 '(planner-plan-page-template "* Tasks


* Notes")
 '(planner-publishing-directory "~/proj/notmine/planner-out")
 '(planner-tasks-file-behavior (quote (quote close)))
 '(planner-use-other-window nil)
 '(remember-data-file "~/.emacs.d/notes")
 '(remember-filter-functions (quote ((lambda nil (delete-trailing-whitespace)))))
 '(remember-handler-functions (quote (remember-planner-append)))
 '(remember-mode-hook (quote (muse-list-edit-minor-mode))))
(custom-set-faces
 '(planner-cancelled-task-face ((t (:foreground "dim gray" :strike-through t))))
 '(planner-completed-task-face ((t (:foreground "dim gray" :strike-through t))))
 '(planner-id-face ((((class color) (background light)) (:foreground "slate gray"))))
 '(planner-medium-priority-task-face ((t (:foreground "dark green")))))

;;; planner-init.el ends here