Add Emacs lisp files.
authorFabien Ninoles <fabien@tzone.org>
Thu, 13 Oct 2011 08:46:42 -0400
changeset 1 a234a7579958
parent 0 df7496e40bee
child 2 c6af35843530
Add Emacs lisp files.
emacs.el
lisp/my-cpp.el
lisp/my-custom.el
lisp/my-dict.el
lisp/my-emacs.el
lisp/my-file-mode.el
lisp/my-gnus.el
lisp/my-init.el
lisp/my-mail.el
lisp/my-markdown.el
lisp/my-old-planner.el
lisp/my-org.el
lisp/my-planner.el
lisp/my-python.el
lisp/my-shell.el
lisp/my-vc.el
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emacs.el	Thu Oct 13 08:46:42 2011 -0400
@@ -0,0 +1,10 @@
+(setq last-nonmenu-event nil)
+(setenv "LANG" "C")
+(setenv "LC_ALL" "C")
+(setq load-path
+      (cons "~/.lisp" load-path))
+(require 'my-init)
+;(my-planner-replan)
+(server-start)
+;(add-to-list 'vc-handled-backends 'SVK)
+; (iconify-frame)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lisp/my-cpp.el	Thu Oct 13 08:46:42 2011 -0400
@@ -0,0 +1,10 @@
+(c-add-style
+ "zeromq" 
+ '("linux"
+   (c-basic-offset . 4)
+   (c-offsets-alist
+    (arglist-cont . +)
+    (arglist-cont-nonempty . +))
+))
+
+(provide 'my-cpp)
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lisp/my-custom.el	Thu Oct 13 08:46:42 2011 -0400
@@ -0,0 +1,114 @@
+(custom-set-variables
+  ;; custom-set-variables was added by Custom.
+  ;; If you edit it by hand, you could mess it up, so be careful.
+  ;; Your init file should contain only one such instance.
+  ;; If there is more than one, they won't work right.
+ '(auto-compression-mode t nil (jka-compr))
+ '(backup-directory-alist (quote (("." . "/home/fabien/.backup"))))
+ '(bbdb-auto-notes-alist (quote (("X-ML-Name" (".*$" ML 0 nil)))))
+ '(bbdb-file "~/PIM/bbdb")
+ '(bbdb-north-american-phone-numbers-p nil)
+ '(bbdb-notice-hook (quote (bbdb-auto-notes-hook)))
+ '(bbdb-use-pop-up nil)
+ '(bbdb-user-mail-names "\\bfabien@\\(alteranode\\.com\\|tzone.org\\|flipr.com\\)\\b")
+ '(bbdb/mail-auto-create-p (quote bbdb-ignore-selected-messages-hook))
+ '(bbdb/news-auto-create-p nil)
+ '(browse-url-browser-function (quote browse-url-mozilla))
+ '(browse-url-mozilla-program "firefox")
+ '(c-default-style (quote ((c++-mode . "zeromq") (java-mode . "java") (awk-mode . "awk") (other . "gnu"))))
+ '(calendar-mark-diary-entries-flag t)
+ '(calendar-view-diary-initially-flag t)
+ '(case-fold-search t)
+ '(current-language-environment "UTF-8")
+ '(custom-file "/home/fabien/.lisp/my-custom.el")
+ '(default-input-method "rfc1345")
+ '(delete-old-versions t)
+ '(diary-display-function (quote (fancy-diary-display)))
+ '(diary-hook (quote (appt-make-list)))
+ '(diary-mail-addr "fabien@alteranode.com")
+ '(dired-kept-versions 2)
+ '(dired-listing-switches "-l")
+ '(dvc-select-priority (quote (xhg bzr)))
+ '(elmo-maildir-folder-path "~/Mail")
+ '(emms-browser-default-browse-type (quote info-genre))
+ '(emms-player-list (quote (emms-player-mpd emms-player-lastfm-radio)))
+ '(eshell-modules-list (quote (eshell-alias eshell-banner eshell-basic eshell-cmpl eshell-dirs eshell-glob eshell-hist eshell-ls eshell-pred eshell-prompt eshell-rebind eshell-script eshell-smart eshell-term eshell-unix)))
+ '(eshell-prefer-lisp-functions t)
+ '(eshell-prefer-to-shell t nil (eshell))
+ '(eshell-unix-load-hook (quote (eshell-unix-initialize local-init-eshell)))
+ '(european-calendar-style t)
+ '(global-font-lock-mode t nil (font-lock))
+ '(indent-tabs-mode nil)
+ '(ispell-local-dictionary "francais-intl" t)
+ '(ispell-local-dictionary-alist (quote (("francais-intl" "A-Za-zÀÂÆÇÈÉÊËÎÏÔÙÛÜŒÑæàâçèéêëîïôùûüœñ" "^A-Za-zÆÀÂÇÈÉÊËÎÏÔÙÛÜÑŒæàâçèéêëîïôùûüœñ" "-'" t ("-d" "french") "~list" iso-8859-15))))
+ '(mail-host-address "ozone.tzone.org")
+ '(muse-project-alist (quote (("WikiPlanner" ("~/Plans" :major-mode planner-mode :default "TaskPool" :visit-link planner-visit-link) (:base "\"planner-xhtml\"" :path "\"~/public_html/Plans\"")))))
+ '(my-planner-last-replan-day (quote (6 15 2010)))
+ '(nxml-slash-auto-complete-flag t)
+ '(org-agenda-files (quote ("~/philo/draft/plan.org" "~/cda-web/TODO.org")))
+ '(planner-appt-alert-buffer "*Alerts*")
+ '(planner-appt-forthcoming-appt-section "Rendez-vous à venir")
+ '(planner-appt-schedule-section "Horaire")
+ '(planner-appt-task-appointments-section "* Rendez-vous")
+ '(planner-appt-task-use-appointments-section-flag t)
+ '(planner-appt-update-appts-on-save-flag t)
+ '(planner-day-page-template (quote my-planner-day-page-template))
+ '(planner-diary-appts-string "* Rendez-vous")
+ '(planner-diary-string "* Évènements")
+ '(planner-diary-use-appts t)
+ '(planner-diary-use-cal-desk nil)
+ '(planner-diary-use-diary t)
+ '(planner-initial-page "Bienvenue")
+ '(planner-log-edit-flush-regexp-list (quote ("^#")))
+ '(planner-multi-separator ", ")
+ '(planner-plan-page-template (quote my-planner-plan-page-template))
+ '(planner-sections (quote ((tasks . "Tâches") (notes . "Notes"))))
+ '(planner-timeclock-summary-include-sub-plan-pages-flag t)
+ '(planner-timeclock-summary-not-planned-string "Non planifiée")
+ '(planner-timeclock-summary-proj-header "Rapport d'activités")
+ '(planner-timeclock-summary-section "Activités")
+ '(remember-handler-functions (quote (remember-planner-append)))
+ '(rng-schema-locating-files (quote ("schemas.xml" "~/.nxml/schemas.xml" "/usr/share/emacs/site-lisp/nxml-mode/schema/schemas.xml")))
+ '(safe-local-variable-values (quote ((sgml-default-dtd-file . "/home/fabien/.sgml/poetry/section.ced") (sgml-default-dtd-file . "~/.sgml/poetry/section.ced") (sgml-local-catalogs "catalog" "../catalog") (sgml-default-dtd-file . "~/.sgml/poetry/poetry.ced") (sgml-parent-document "poetry.xml" "section" "subsection" ("title")) (sgml-indent-step . 0) (default-justification . full) (sgml-omittag . t) (sgml-shorttag . t) (sgml-namecase-general . t) (sgml-default-dtd-file . "~/.sgml/html401.ced") (sgml-indent-data . t) (sgml-local-catalogs "../catalog") (sgml-default-dtd-file . "~/.sgml/docbook/book.ced") (sgml-omittag) (sgml-shorttag) (sgml-namecase-general) (sgml-general-insert-case . lower) (sgml-minimize-attributes) (sgml-always-quote-attributes . t) (sgml-indent-step . 2) (sgml-indent-data) (sgml-parent-document) (sgml-default-dtd-file . "~/.sgml/docbook/article.ced") (sgml-exposed-tags) (sgml-local-catalogs) (sgml-local-ecat-files))))
+ '(save-place t nil (saveplace))
+ '(smtp-default-server "localhost")
+ '(smtp-end-of-line "
+
+" t)
+ '(smtp-fqdn "ozone.tzone.org")
+ '(smtp-local-domain "tzone.org")
+ '(smtp-open-connection-function (quote open-network-stream) t)
+ '(smtp-server "localhost")
+ '(tab-width 4)
+ '(timeclock-file "~/Plans/timelog")
+ '(uniquify-buffer-name-style (quote post-forward-angle-brackets) nil (uniquify))
+ '(use-file-dialog nil)
+ '(vc-command-messages t)
+ '(vc-handled-backends (quote (RCS CVS SVN SCCS Arch MCVS hg)))
+ '(version-control t)
+ '(whitespace-style (quote (face tabs spaces trailing lines space-before-tab newline indentation empty space-after-tab space-mark tab-mark newline-mark)))
+ '(wl-auto-check-folder-name "INBOX")
+ '(wl-bcc nil)
+ '(wl-draft-always-delete-myself t)
+ '(wl-draft-send-mail-function (quote sendmail-send-it))
+ '(wl-draft-use-frame t)
+ '(wl-envelope-from "fabien@ozone.tzone.org")
+ '(wl-folder-init-load-access-folders (quote ("^.OZoNE/\\(INBOX\\|yahoogroups\\|sourceforge\\|debian\\)$" "^.Alteranode/mbox$")))
+ '(wl-from "Fabien Ninoles <fabien@tzone.org>" t)
+ '(wl-interactive-send t)
+ '(wl-smtp-authenticate-type "login")
+ '(wl-smtp-connection-type (quote starttls))
+ '(wl-smtp-posting-port 587)
+ '(wl-smtp-posting-server "ozone.tzone.org")
+ '(wl-smtp-posting-user "fabien")
+ '(wl-summary-from-function (quote bbdb-wl-from-func))
+ '(wl-temporary-file-directory "~/.tmp/")
+ '(wl-user-mail-address-list (quote ("fabien@tzone.org" "fabien@alteranode.com" "veneur@tzone.org"))))
+(custom-set-faces
+  ;; custom-set-faces was added by Custom.
+  ;; If you edit it by hand, you could mess it up, so be careful.
+  ;; Your init file should contain only one such instance.
+  ;; If there is more than one, they won't work right.
+ )
+
+(provide 'my-custom)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lisp/my-dict.el	Thu Oct 13 08:46:42 2011 -0400
@@ -0,0 +1,12 @@
+;;; ISpell configuration
+(setq ispell-local-dictionary-alist
+      (append ispell-local-dictionary-alist
+	      (quote ("francais-intl"
+		      "[A-Za-zÀÂÆÇÈÉÊËÎÏÔÙÛÜŒÑæàâçèéêëîïôùûüœñ]" 
+		      "[^A-Za-zÆÀÂÇÈÉÊËÎÏÔÙÛÜÑŒæàâçèéêëîïôùûüœñ]"
+		      "[-']"
+		      nil 
+		      ("-d" "french") 
+		      "~list" iso-8859-15))))
+
+(provide 'my-dict)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lisp/my-emacs.el	Thu Oct 13 08:46:42 2011 -0400
@@ -0,0 +1,142 @@
+;;;_ Helpers
+
+(setq load-path
+      (cons "~/lisp" load-path))
+(defun join (SEQUENCES sep)
+  (mapconcat 'copy-sequence SEQUENCES sep))
+
+
+;;;_ Version control
+
+;(require 'vc-svn)
+(require 'vc-svk)
+;(require 'vc-svk2)
+(add-to-list 'vc-handled-backends 'SVK)
+;(require 'psvn)
+(require 'psvk)
+
+;;;_ EShell configuration
+(setenv "EDITOR" "gnuclient")
+(setenv "VISUAL" "gnuclient")
+(setenv "DEBIAN_FRONTEND" "editor")
+(defun local-init-eshell ()
+  "Local customization of eshell."
+  (defsubst eshell/make (&rest args)
+    "run make in lisp compile."
+    (compile (join (push "make" args) " "))))
+
+;;; ISpell configuration
+(if (fboundp 'debian-ispell-add-dictionary-entry)
+    (debian-ispell-add-dictionary-entry 
+     (quote ("francais-intl"
+	     "[A-Za-zÀÂÆÇÈÉÊËÎÏÔÙÛÜŒÑæàâçèéêëîïôùûüœñ]" 
+	     "[^A-Za-zÆÀÂÇÈÉÊËÎÏÔÙÛÜÑŒæàâçèéêëîïôùûüœñ]"
+	     "[-']"
+	     nil 
+	     ("-d" "french") 
+	     "~list" iso-8859-15))
+     "aspell"))
+(setq ispell-dictionary-alist debian-ispell-dictionary-alist)
+
+
+;;;_ Planner configuration
+
+;; In emacs21/sarge, schedule doesn't exist.
+;; But in planner-el/etch, schedule is in contrib.
+(if (not (locate-library "schedule"))
+    (setcdr (last load-path)
+		     '("/usr/share/emacs/site-lisp/planner-el/contrib")))
+(if (locate-library "schedule")
+    (require 'planner-timeclock))
+(require 'planner-wl)
+(planner-wl-insinuate)
+(require 'planner-diary)
+(planner-diary-insinuate)
+(planner-calendar-insinuate)
+(require 'planner-appt)
+(planner-appt-use-tasks)
+(planner-appt-insinuate)
+(require 'planner-cyclic)
+(planner-appt-schedule-cyclic-insinuate)
+(planner-appt-calendar-insinuate)
+(require 'planner-timeclock-summary)
+(planner-timeclock-summary-insinuate)
+(require 'planner-timeclock-summary-proj)
+(planner-timeclock-summary-proj-insinuate)
+(require 'planner-schedule)
+(require 'planner-bbdb)
+(require 'planner-erc)
+(require 'planner-bookmark)
+(require 'remember-planner)
+(require 'planner-log-edit)
+(planner-install-extra-task-keybindings)
+(planner-install-extra-context-keybindings)
+(require 'planner-trunk)
+(require 'planner-multi)
+; Local functions for planner
+(require 'my-planner)
+
+(require 'my-mailto)
+;;;_ Wanderlust settings
+
+(autoload 'wl-user-agent-compose "wl-draft" nil t)
+(if (boundp 'mail-user-agent)
+    (setq mail-user-agent 'wl-user-agent))
+(if (fboundp 'define-mail-user-agent)
+    (define-mail-user-agent
+      'wl-user-agent
+      'wl-user-agent-compose
+      'wl-draft-send
+      'wl-draft-kill
+      'mail-send-hook))
+(setq wl-draft-init-config-alist
+      '((reply "^\\(To\\|CC\\): .*@alteranode.com" 
+	       ("From" . "Fabien Ninoles <fabien@alteranode.com>")) 
+	(reply "^\\(To\\|CC\\): .*fabien@flipr.com" 
+	       ("From" . "Fabien Ninoles <fabien@flipr.com>"))))
+(setq wl-draft-send-config-alist 
+      '(("^From: .*fabien\\(\\+.*\\)?@tzone.org"
+	 ("BCC" . "fabien+sentmail@tzone.org"))
+	("From: .*fabien\\(\\+.*\\)?@alteranode.com" 
+	 ("Organisation" . "Alteranode, inc.")
+	 ("BCC" . "fabien+sentmail@alteranode.com")) 
+	("From: .*fabien\\(\\+.*\\)?@flipr.com" 
+	 ("BCC" . "fabien+sentmail@alteranode.com"))))
+(add-hook 'wl-mail-setup-hook
+	  '(lambda ()
+	     (wl-draft-config-exec wl-draft-init-config-alist)
+	     (setq wl-draft-config-exec-flag t)))
+(add-hook 'wl-draft-send-hook
+	  '(lambda ()
+	     (setq wl-draft-config-exec-flag t)
+	     (wl-draft-config-exec wl-draft-send-config-alist)
+	     ))
+(require 'bbdb-wl)
+(bbdb-wl-setup)
+;; enable pop-ups
+(setq bbdb-use-pop-up t)
+;; auto collection
+(setq bbdb/mail-auto-create-p t)
+;; exceptional folders against auto collection
+(setq bbdb-wl-ignore-folder-regexp "^@")
+(setq signature-use-bbdb t)
+(setq bbdb-north-american-phone-numbers-p nil)
+;; shows the name of bbdb in the summary :-)
+(setq wl-summary-from-function 'bbdb-wl-from-func)
+;; automatically add mailing list fields
+(add-hook 'bbdb-notice-hook 'bbdb-auto-notes-hook)
+(setq bbdb-auto-notes-alist '(("X-ML-Name" (".*$" ML 0))))
+
+
+;;;_ Auto outline Allout
+
+;(require 'allout)
+;(outline-init t)
+
+;;;_ Start up command
+
+;; (server-start)
+(display-time)
+(diary 0)
+(plan 31)
+(iconify-frame)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lisp/my-gnus.el	Thu Oct 13 08:46:42 2011 -0400
@@ -0,0 +1,123 @@
+(setq mm-coding-system-priorities
+      '(iso-latin-1 iso-latin-9))
+
+(defun local-nnmail-match-expiry  (newsgroup)
+  "Return default expiry for different newsgroup."
+  (cond ((string-match "archives" newsgroup) 'never)
+        ((string-match "sentmail" newsgroup) 'never)
+        ((string-match "postponed" newsgroup) 'never)
+        ((string-match "debian" newsgroup) 7)
+        ((string-match "jabber" newsgroup) 7)
+        ((string-match "gnucash" newsgroup) 7)
+        ((string-match "egroups" newsgroup) 7)
+        ((string-match "emacs.ding" newsgroup) 7)
+        ((string-match "spam" newsgroup) 1)
+        (t 31)))
+
+(defvar local-signature-alist nil)
+(setq local-signature-alist 
+      '(("default" . (("name" . "Fabien Nioles")
+                      ("title" . "")
+                      ("email" . "fabien@tzone.org")
+                      ("web" . "http://www.tzone.org")
+                      ("key" . "C15D FE9E BB35 F596 127F  BF7D 8F1F DFC9 BCE0 9436")))
+    ("debian" . (("email" . "fabien@debian.org")
+                 ("web" . "http://www.debian.org")
+                 ("title" . "Debian Maintainer")))
+    ("clef" . (("email" . "veneur@tzone.org")
+               ("web" . "http://harmonies.tzone.org")
+               ("title" . "Chevalier de la Loge des Terres de l'Aube")
+               ("name" . "Le Veneur Gris")))
+    ("hdf" . (("email" . "veneur@tzone.org")
+               ("web" . "http://harmonies.tzone.org")
+               ("title" . "Chevalier Servant de Sa Dame")
+               ("name" . "Le Veneur Gris")))
+    ("nephilim" . (("email" . "coeurdelune@nephilim-rpg.com")
+                   ("name" . "Coeur de Lune")
+                   ("title" . "Zphir orphelin")
+                   ("web" . "http://harmonies.tzone.org")))
+    ("ids" . (("name" . "Goudron Sauvage")
+              ("title" . "Valier Vampire Dcal Rvolutionnaire")
+              ("email" . "veneur@tzone.org")
+              ("web" . "http://cruche.valiere.free.fr")))
+    ("rdd" . (("name" . "Baffouille")
+              ("title" . "Enrveur et Archimage")
+              ("email" . "veneur@tzone.org")
+              ("web" . "http://harmonies.tzone.org")))
+    ("jdr" . (("title" . "Arpges, le jeu des Harmonies")
+              ("web" . "http://harmonies.tzone.org")))
+    ("baff" . (("name" . "Baffouille")
+              ("title" . "Enrveur et Archimage")))))
+
+(defun local-gen-sign (type)
+  "Generate a signature."
+  (let 
+      ((default-keys 
+         (copy-alist
+          (cdr (assoc "default" local-signature-alist))))
+       (selected-keys 
+        (cdr (assoc type local-signature-alist))))
+    (dolist (pair selected-keys default-keys)
+      (setcdr (assoc (car pair) default-keys)
+              (cdr pair)))
+    (let*
+        ((GPG-title "GPG KeyID:")
+         (name (cdr (assoc "name" default-keys)))
+         (title (cdr (assoc "title" default-keys)))
+         (email (cdr (assoc "email" default-keys)))
+         (web (cdr (assoc "web" default-keys)))
+         (key (cdr (assoc "key" default-keys)))
+         (maxlenght
+          (max (+ 2 (string-width name) (string-width title))
+               (+ 2 (string-width email) (string-width web))
+               (+ 1 (string-width GPG-title) (string-width key)))))
+      (concat name 
+              (make-string (- maxlenght (string-width name) (string-width title)) ? )
+              title
+              "\n"
+              email
+              (make-string (- maxlenght (string-width email) (string-width web)) ? )
+              web
+              "\n"
+              GPG-title
+              (make-string (- maxlenght (string-width GPG-title) (string-width key)) ? )
+              key
+              "\n"))))
+
+(defvar local-last-sig nil)
+(defun local-insert-signature (type)
+  "Insert a signature."
+  (interactive (list
+                (completing-read "Which signature: "
+                                 local-signature-alist
+                                 nil
+                                 nil
+                                 nil
+                                 nil
+                                 (or local-last-sig "default"))))
+  (setq local-last-sig type)
+  (save-excursion
+    (goto-char (point-max))
+    (let ((beg-sign
+           (re-search-backward message-signature-separator nil t)))
+      (if beg-sign
+          (kill-region
+           beg-sign (point-max))))
+    (goto-char (point-max))
+    (unless (bolp)
+      (insert "\n"))
+    (insert "-- \n")
+    (insert (local-gen-sign type))))
+
+(defun local-alter-message-map ()
+  (local-set-key "\C-c\C-w" 'local-insert-signature))
+
+(defun local-outgoing-message-group ()
+  "Return the sentmail group."
+  (concat "mail/sentmail-archives/"
+          (format-time-string "%Y.%m")))
+
+(setq gnus-outgoing-message-group
+      'local-outgoing-message-group)
+
+(provide 'local-gnus)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lisp/my-init.el	Thu Oct 13 08:46:42 2011 -0400
@@ -0,0 +1,33 @@
+;;; Inside .emacs.el
+;; ;; Set to nil for a nonmenu-event like...
+;; (setq last-nonmenu-event nil)
+;; (setq load-path
+;;       (cons "~/lisp" load-path))
+;; (require 'my-init)
+
+;;;_ Helpers
+
+(defun join (SEQUENCES sep)
+  (mapconcat 'copy-sequence SEQUENCES sep))
+
+(require 'my-shell)
+;(require 'my-planner)
+;(require 'my-vc)
+;(require 'my-mail)
+(require 'my-custom)
+;(require 'my-dict)
+(require 'calc)
+;(require 'css-mode)
+(require 'my-org)
+(require 'my-python)
+(require 'my-cpp)
+(require 'my-markdown)
+
+;;;_ final provide before startup
+
+(provide 'my-init)
+
+;;;_ Start up commands
+
+;(plan 31)
+;(iconify-frame)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lisp/my-mail.el	Thu Oct 13 08:46:42 2011 -0400
@@ -0,0 +1,81 @@
+(require 'browse-url)
+
+;;;_ Custom functions
+
+; Redefine browse-url-mail for ?subject=SUBJECT support.
+
+(defun browse-url-mail (url &optional new-window)
+  "Open a new mail message buffer within Emacs.
+Default to using the mailto: URL around or before point as the
+recipient's address.  Supplying a non-nil interactive prefix argument
+will cause the mail to be composed in another window rather than the
+current one.
+
+When called interactively, if variable `browse-url-new-window-flag' is
+non-nil use `compose-mail-other-window', othserwise `compose-mail'.  A
+non-nil interactive prefix argument reverses the effect of
+`browse-url-new-window-flag'.
+
+When called non-interactively, optional second argument NEW-WINDOW is
+used instead of `browse-url-new-window-flag'."
+  (interactive (browse-url-interactive-arg "Mailto URL: "))
+  (save-excursion
+    (let ((to (if (string-match "^mailto:" url)
+		  (substring url 7)
+		url))
+	  (subject nil))
+      (if (string-match "\\?subject=" to)
+	  (setq subject (substring to (match-end 0))
+		to (substring to 0 (match-beginning 0))))
+      (if (browse-url-maybe-new-window new-window)
+	  (compose-mail-other-window to subject nil nil
+				     (list 'insert-buffer (current-buffer)))
+	(compose-mail to subject nil nil nil
+		      (list 'insert-buffer (current-buffer)))))))
+
+;;;_ Wanderlust settings
+
+(autoload 'wl-user-agent-compose "wl-draft" nil t)
+(if (boundp 'mail-user-agent)
+    (setq mail-user-agent 'wl-user-agent))
+(if (fboundp 'define-mail-user-agent)
+    (define-mail-user-agent
+      'wl-user-agent
+      'wl-user-agent-compose
+      'wl-draft-send
+      'wl-draft-kill
+      'mail-send-hook))
+(setq wl-draft-init-config-alist
+      '((reply "^\\(To\\|CC\\): .*@alteranode.com" 
+	       ("From" . "Fabien Ninoles <fabien@alteranode.com>")) 
+	(reply "^\\(To\\|CC\\): .*fabien@flipr.com" 
+	       ("From" . "Fabien Ninoles <fabien@flipr.com>"))))
+(setq wl-draft-send-config-alist 
+      '(("^From: .*fabien\\(\\+.*\\)?@tzone.org"
+	 ("BCC" . "fabien+sentmail@tzone.org"))
+	("From: .*fabien\\(\\+.*\\)?@alteranode.com" 
+	 ("Organisation" . "Alteranode, inc.")
+	 ("BCC" . "fabien+sentmail@alteranode.com")) 
+	("From: .*fabien\\(\\+.*\\)?@flipr.com" 
+	 ("BCC" . "fabien+sentmail@alteranode.com"))))
+(add-hook 'wl-mail-setup-hook
+	  '(lambda ()
+	     (wl-draft-config-exec wl-draft-init-config-alist)
+	     (setq wl-draft-config-exec-flag t)))
+(add-hook 'wl-draft-send-hook
+	  '(lambda ()
+	     (setq wl-draft-config-exec-flag t)
+	     (wl-draft-config-exec wl-draft-send-config-alist)
+	     ))
+
+;;;_ BBDB configuration
+
+(require 'bbdb-wl)
+(bbdb-wl-setup)
+;; exceptional folders against auto collection
+(setq bbdb-wl-ignore-folder-regexp "^@")
+(setq signature-use-bbdb t)
+;; automatically add mailing list fields
+(setq bbdb-ignore-selected-messages-confirmation t)
+
+(provide 'my-mail)
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lisp/my-markdown.el	Thu Oct 13 08:46:42 2011 -0400
@@ -0,0 +1,11 @@
+(add-to-list 'auto-mode-alist '("\\.md$" . markdown-mode))
+
+(setq ditaa-cmd "ditaa")
+(defun ditaa-generate (start end)
+  (interactive "r")
+  (let ((tmpfile (make-temp-file "ditaa")))
+    (write-region start end tmpfile)
+    (shell-command
+     (concat ditaa-cmd " " tmpfile " " (concat buffer-file-name ".png")))))
+
+(provide 'my-markdown)
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lisp/my-old-planner.el	Thu Oct 13 08:46:42 2011 -0400
@@ -0,0 +1,448 @@
+; timeclock functionnality
+(require 'timeclock)
+(require 'calendar)
+
+;(timeclock-modeline-display)
+(add-hook 'kill-emacs-hook 'timeclock-query-out)
+ 
+;; planner mode
+
+;;; helper functions
+
+(defun planner-date-to-calendar (date)
+  "Convert a planner date string like \"YYYY.MM.DD\" in
+   a calendar date list (month day year)."
+  (let ((split-date 
+         (mapcar 'string-to-number 
+                 (split-string (file-name-nondirectory date) "\\."))))
+    (list (nth 1 split-date) 
+          (nth 2 split-date)
+          (nth 0 split-date))))
+
+(defsubst calendar-date-to-planner (date)
+; "Convert a planner date string like \"YYYY.MM.DD\" in
+; a calendar date list (month day year)."
+  (format "%04d.%02d.%02d"
+          (nth 2 date)
+          (nth 0 date)
+          (nth 1 date)))
+
+;; Moving functions
+
+(defun planner-goto-schedule ()
+  "Create if necessary and go to a Schedule section in current planner.
+Ensure to preserved the buffer-modified-p value so that a kill will not
+preserve the automated change for nothing."
+  (interactive)
+  (goto-char (point-min))
+  (let ((modified (buffer-modified-p)))
+    (unless (re-search-forward "^\\* Schedule\n\n" nil t)
+      (re-search-forward "^\\* Notes")
+      (beginning-of-line)
+      (insert "* Schedule\n\n\n\n")
+      (forward-line -2)
+      (set-buffer-modified-p modified))))
+
+(defun planner-goto-events ()
+  "Create if necessary and go to a Events section just before the
+Schedule one (which is also create if necessary) in current planner.
+Ensure to preserved the buffer-modified-p value so that a kill will
+not preserve the automated change for nothing."
+  (interactive)
+  (goto-char (point-min))
+  (let ((modified (buffer-modified-p)))
+    (unless (re-search-forward "^\\* Events\n\n" nil t)
+      (planner-goto-schedule)
+      (re-search-backward "^\\* Schedule")
+      (insert "* Events\n\n\n\n")
+      (forward-line -2)
+      (set-buffer-modified-p modified))))
+
+;; The reminders converter.
+;;
+;; It now used a custom diary file, so you
+;; can included it without breaking your normal diary-file.
+;; The function can also set some arguments.  I used it to call
+;; a modified remconv which accept a "euro" argument to output
+;; euro style date.
+;;
+;; I no more used those ones now since I'm directly marking the
+;; calendar and the add-appt from the planner files.
+
+(defcustom planner-diary-file diary-file
+  "Diary file where to add planner entries.  You can set this value to
+another file than `diary-file' and add in `diary-file' the #include
+\"~/your-planner-diary-file-name\".  Just make sure that you call
+`planner-convert-reminders' before `include-other-diary-files' in the
+`list-diary-entries-hook'."
+  :type 'file
+  :group 'planner)
+
+(defcustom planner-remconv-command "remconv"
+  "A command that output diary compatible entries.  Can take arguments
+also."
+  :type 'string
+  :group 'planner)
+
+(defun planner-convert-reminders ()
+  "Generate a diary file from a .reminders file.
+You can add this this function to the `list-diary-entries-hook'"
+  (with-current-buffer (find-file-noselect planner-diary-file)
+    (erase-buffer)
+    (insert (shell-command-to-string planner-remconv-command))
+    (save-buffer)))
+
+;; redefinition of planner-maybe-remove-file 
+;;
+;; The kill-buffer of this function make me crazy.  I modify it so you
+;; can change it's behavior using this custom variable.  Personnaly, I
+;; used ignore and let emacs ask me to save it when I kill it.  Take
+;; also note that I change the regexp to remove any file that only
+;; have empty section (section with just a first level heading).  This
+;; is to cope with the new Events and Schedule sections.
+
+(defcustom planner-not-empty-file 'kill-this-buffer
+  "Command to run when a planner file is not empty.  Can be
+kill-this-buffer, save-buffer or ignore for example."
+  :type 'function
+  :group 'planner)
+
+(defvar local-planner-empty-line-regexp "\\(\\* .*\\|[[:space:]]*\\)")
+(defvar planner-empty-file-regexp 
+  (concat "\\(^" local-planner-empty-line-regexp
+          "\n\\)*[[:space:]]*\\'"))
+
+; redefinition
+
+(defun planner-maybe-remove-file ()
+  "This function remove the file if it contains only first level
+headings and empty lines."
+  (interactive)
+  (goto-char (point-min))
+  (if (looking-at planner-empty-file-regexp)
+      (let ((filename buffer-file-name))
+	(set-buffer-modified-p nil)
+	(kill-buffer (current-buffer))
+	(delete-file filename))
+    (funcall planner-not-empty-file)))
+
+;; planner-browse-url bbdb url handling
+;;
+;; My emacs-wiki doesn't like bbdb url like [[bbdb://Fabien Nioles]]
+;; I make this advice so he can replace _ with space and __ with _ in the
+;; url before letting planner-browse-url handling it.
+
+(defadvice planner-browse-url (before local-bbdb-url-pretreatment (url))
+  "Pretreatment of some URL."
+  (if (string-match "^bbdb://\\(.+\\)" url)
+      (setq url
+            (mapconcat 
+             '(lambda (str) (subst-char-in-string ?_ ?  str t))
+             (split-string url "__")
+             "_"))))
+
+(ad-activate 'planner-browse-url)
+
+;; diary support functions
+;;
+;; This functions add diary entries into the Schedule and Events
+;; sections of a planner buffer.  I hook it to the
+;; `planner-seek-to-first' function and only if the Events section
+;; doesn't already exist.  The best should be that it check if the
+;; entry doesn't exist already instead but currently it works pretty
+;; good.  You can always call it interactively if you want to update
+;; your Events/Schedule.  Just make sure that you don't add the
+;; `planner-convert-reminder' set in the `list-diary-entries-hook'
+;; setup.
+
+(defun planner-insert-diary ()
+  "Insert the diary schedule in the planner buffer."
+  (interactive)
+  (let*
+    ((entries (list-diary-entries (planner-date-to-calendar (emacs-wiki-page-name)) 1))
+     (events))
+    (planner-goto-schedule)
+    (while entries
+      (let* ((entry (nth 1 (car entries)))
+             (lines (split-string entry "\n"))
+             (line))
+        (while (setq line (car lines))
+          (if (string-match
+               "^[[:space:]]*\\([0-9]+:[0-9]\\{2\\}\\(?:am\\|pm\\)?\\)\\(-[0-9]+:[0-9]\\{2\\}\\(?:am\\|pm\\)?\\)?[[:space:]]+\\(.*\\)$" 
+               line)
+          (let ((starttime (match-string 1 line))
+                (endtime (match-string 2 line))
+                (description (match-string 3 line)))
+            (insert (concat "  " starttime
+                            " | " description
+                            (if endtime
+                                (let
+                                    ((minutes
+                                      (- (appt-convert-time (substring endtime 1 nil))
+                                         (appt-convert-time starttime))))
+                                  (format " (%d:%02d)"
+                                          (/ minutes 60)
+                                          (% minutes 60)))
+                                "")
+                              "\n")))
+          (setq events (cons line events)))
+          (setq lines (cdr lines))))
+      (setq entries (cdr entries)))
+    (planner-goto-events)
+    (while events
+      (insert (concat " - " (car events) "\n"))
+      (setq events (cdr events)))))
+
+(defadvice planner-seek-to-first (after planner-insert-diary-ad ())
+  "Insert the diary into a newly create buffer."
+  (if (string-match planner-date-regexp (emacs-wiki-page-name))
+      (save-excursion
+        (goto-char (point-min))
+        (if (not (re-search-forward "^\\* Events[[:space:]]*$" nil t))
+            (planner-insert-diary)))))
+
+(ad-activate 'planner-seek-to-first)
+
+;; appt support
+;;
+;; I'm loading now my appointments directly from the planner list.  It
+;; has the same functionnality as the regular appt-make-list,
+;; including its own planner-prev-appt-check variable.  It's set as an
+;; after-advice to appt-check.  I also add a function that parse the
+;; current line and add the appt to it's list.  The
+;; planner-appt-entry-regexp are setup to catch any 'HH:MM | Message
+;; (HH:MM)' line (just like allrems). You can set it up also to ignore
+;; some special line (like those beginning with '&' for example).
+
+(require 'appt)
+
+(defvar planner-appt-entry-regexp 
+  "^[[:space:]]*\\([0-9]+:[0-9]\\{2\\}\\)[[:space:]]*|[[:space:]]*\\([^&].*\\)[[:space:]]*\\(([0-9]+:[0-9]\\{2\\})\\)?[[:space:]]*$"
+  "Regexp that match a appt entry in planner.")
+
+(defun planner-appt-add ()
+  "Add this line as an appointment.  The line should match
+`planner-appt-entry-regexp'."
+  (interactive)
+  (save-excursion
+    (beginning-of-line)
+    (if (looking-at planner-appt-entry-regexp)
+        (appt-add (match-string-no-properties 1) (match-string-no-properties 2))
+      (error "No appointment on this line"))))
+
+(defun planner-make-appt-list ()
+  "Load today planner file and make appt-list from schedule."
+  (interactive)
+  (save-excursion
+    (save-window-excursion 
+      (planner-goto-today)
+      (while (re-search-forward planner-appt-entry-regexp nil t)
+        (appt-add (match-string-no-properties 1) (match-string-no-properties 2))))))
+
+(defvar planner-prev-appt-check nil
+  "Determine the last time appt-check are called")
+
+(defadvice appt-check (after planner-appt-check-ad ())
+  "Call planner-make-appt-list the first time and every day."
+  (let* ((now (decode-time))
+         (cur-hour (nth 2 now))
+         (cur-min (nth 1 now))
+         (cur-comp-time (+ (* cur-hour 60) cur-min)))
+    (if (or (null planner-prev-appt-check)
+            (< cur-comp-time planner-prev-appt-check))
+        (planner-make-appt-list))
+    (setq planner-prev-appt-check cur-comp-time)))
+
+(ad-activate 'appt-check)
+
+;; calendar support
+;;
+;; This function are used to mark calendar entries directly from the
+;; planner files.  I try to optimize it with a helper function that
+;; take the list of planner-date string corresponding to the three
+;; months display of the calendar (same behavior as the
+;; mark-diary-entries-hook).  One of the helper are made in elisp, and
+;; the other used an external perl script to parse the entries.  The
+;; only thing check is a non-empty (I mean non-space) Events section.
+;; Used it as a hook to the `mark-diary-entries-hook'.  Since this
+;; function also search for diary entries, you can used it in
+;; conjunction with diary.  And with the `planner-diary-insert'
+;; function, you just have to type 'n' at the calendar day to see both
+;; the diary and your normal planner entry.  The helper script is call events
+;; and it's very short (see documentation of planner-mark-calendar-external-helper
+;; for the script. The script also return the entry line so that you can remove
+;; specially mark entry if you care, either by directly modifying the
+;; script or by modifying the planner-mark-calendar-external-helper
+;; function.
+
+(defcustom planner-mark-calendar-helper 'planner-mark-calendar-internal-helper
+  "Helper function to determinate which day have a non-empty events.
+Currently, it exist two functions to do it:
+`planner-mark-calendar-internal-helper' which is a lisp
+implementation, and `planner-mark-calendar-external-helper' which used
+a external script to do most of the parsing."
+  :type 'function
+  :group 'planner)
+
+(defun planner-mark-calendar ()
+  "Look for planner file with non-empty events."
+  (save-window-excursion
+    (set-buffer calendar-buffer)
+    (let ((prev-month displayed-month)
+          (prev-year displayed-year)
+          (succ-month displayed-month)
+          (succ-year displayed-year)
+          (last-day)
+          (day)
+          (files nil))
+      (increment-calendar-month succ-month succ-year 1)
+      (increment-calendar-month prev-month prev-year -1)
+      (setq day (calendar-absolute-from-gregorian (list prev-month 1 prev-year)))
+      (setq last-day 
+            (calendar-absolute-from-gregorian 
+             (list succ-month 
+                   (calendar-last-day-of-month succ-month succ-year)
+                   succ-year))) 
+      (while (<= day last-day)
+        (let* ((date (calendar-gregorian-from-absolute day))
+               (file 
+                (expand-file-name 
+                 (calendar-date-to-planner date)
+                 planner-directory)))
+          (if (file-readable-p file)
+              (setq files (cons file files))))
+        (setq day (1+ day)))
+      (setq files (funcall planner-mark-calendar-helper files))
+      (while files
+        (mark-visible-calendar-date (planner-date-to-calendar (car files)))
+        (setq files (cdr files))))))
+
+(defun planner-mark-calendar-internal-helper (files)
+  "Local (elisp) helper function for `planner-mark-calendar'."
+  (let ((correct))
+    (while files
+      (find-file-other-window (car files))
+      (goto-char (point-min))
+      (if (re-search-forward "^\\* Events" nil t)
+          (progn
+            (forward-line 1)
+            (if (re-search-forward 
+                 "[^[:space:]]+"
+                 (save-excursion
+                   (re-search-forward "^\\* " nil t)
+                   (let ((p (match-beginning 0)))
+                     (and p (1- p))))
+                 t)
+                (setq correct (cons (car files) correct)))))
+      (if (not (buffer-modified-p)) (kill-this-buffer))
+      (setq files (cdr files)))
+    correct))
+
+(defcustom planner-mark-calendar-external-script "events %s"
+  "Command line that select files that must be marked.
+This string is send to the shell with %s replace with a list
+of space separate (maybe non-existing) file names. An example
+of such script follow:
+
+#!/usr/bin/perl -s
+
+for $file (sort @ARGV) {
+    open (FILE, $file) || die \"Cannot open file $file\\n\";
+    $inevents = 0;
+    while (<FILE>) {
+            if ($inevents == 0) {
+                if (/^\\* Events/) {
+                    $inevents = 1;
+                }
+            } elsif (/^\\* /) {
+                $inevents = 0;
+                break;
+            }
+            elsif (/^\\s*\\S/) {
+                printf \"$file: $_\";
+            }
+        }
+    close (FILE);
+};
+"
+  :type 'string
+  :group 'planner)
+  
+(defun planner-mark-calendar-external-helper (files)
+  "Use an external application to parse the planner files.
+The command line is set with the `planner-mark-calendar-external-script'
+variable and must take a list of files as arguments."
+  (let* ((command (concat "events " 
+                         (mapconcat 'identity files " ")))
+         (output (split-string (shell-command-to-string command) "\n"))
+         (results))
+    (while output
+      (if (string-match "^\\([^:]+\\):" (car output))
+          (setq results 
+                (cons (match-string 1 (car output))
+                      results)))
+      (setq output (cdr output)))
+    results))
+
+
+;; planner-mode key mapping
+;;
+;; No comment for this one.  Do ye want.
+
+(eval-after-load "planner"
+  '(progn
+     (define-key planner-mode-map [(control ?c) (control ?w)]
+       'planner-goto-schedule)
+     (define-key planner-mode-map [(control ?c) (control ?n)]
+       'planner-create-note)
+     (define-key planner-mode-map [(control ?c) (control ?e)]
+       'planner-appt-add)))
+
+;; global key mapping
+
+(define-key ctl-x-map "ta" 'planner-create-task)
+(define-key ctl-x-map "ts" 'planner-goto-today)
+(define-key ctl-x-map "ti" 'timeclock-in)
+(define-key ctl-x-map "to" 'timeclock-out)
+(define-key ctl-x-map "tc" 'timeclock-change)
+(define-key ctl-x-map "tr" 'timeclock-reread-log)
+(define-key ctl-x-map "tv" 'timeclock-status-string)
+;(define-key ctl-x-map "tu" 'timeclock-update-modeline)
+;(define-key ctl-x-map "tw" 'timeclock-when-to-leave-string)
+
+
+(defun local-planner-kill-buffer ()
+  "Kill the buffer and erase it if empty."
+  (interactive)
+  (let (
+        (planner-not-empty-file 'kill-this-buffer)
+;        (planner-not-empty-file (lambda () (save-buffer) (kill-this-buffer)))
+       )
+    (planner-maybe-remove-file)))
+
+;; planner-mode  key mapping
+(eval-after-load "planner"
+  '(progn
+     (define-key planner-mode-map [(control ?c) (control ?w)]
+       'planner-goto-schedule)
+     (define-key planner-mode-map [(control ?c) (control ?n)]
+       'planner-create-note)
+     (define-key planner-mode-map [(control ?c) (control ?k)]
+       'local-planner-kill-buffer)
+     (define-key planner-mode-map [(control ?c) (control ?e)]
+       'planner-appt-add)))
+
+;; global key mapping
+
+(define-key ctl-x-map "ta" 'planner-create-task)
+(define-key ctl-x-map "ts" 'planner-goto-today)
+(define-key ctl-x-map "tj" 'planner-goto)
+(define-key ctl-x-map "ti" 'timeclock-in)
+(define-key ctl-x-map "to" 'timeclock-out)
+(define-key ctl-x-map "tc" 'timeclock-change)
+(define-key ctl-x-map "tr" 'timeclock-reread-log)
+(define-key ctl-x-map "tv" 'timeclock-status-string)
+;(define-key ctl-x-map "tu" 'timeclock-update-modeline)
+;(define-key ctl-x-map "tw" 'timeclock-when-to-leave-string)
+
+(provide 'local-planner)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lisp/my-org.el	Thu Oct 13 08:46:42 2011 -0400
@@ -0,0 +1,5 @@
+(add-to-list 'auto-mode-alist '("\\.org$" . org-mode))
+(define-key global-map "\C-xL" 'org-store-link)
+(define-key global-map "\C-xA" 'org-agenda)
+
+(provide 'my-org)
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lisp/my-planner.el	Thu Oct 13 08:46:42 2011 -0400
@@ -0,0 +1,227 @@
+;;;_ Planner configuration
+
+;; In emacs21/sarge, schedule doesn't exist.
+;; But in planner-el/etch, schedule is in contrib.
+(if (not (locate-library "schedule"))
+    (setcdr (last load-path)
+		     '("/usr/share/emacs/site-lisp/planner-el/contrib")))
+(if (locate-library "schedule")
+    (require 'planner-timeclock))
+;(require 'planner-wl)
+;(planner-wl-insinuate)
+(require 'planner-diary)
+(planner-diary-insinuate)
+(require 'planner-export-diary)
+(planner-calendar-insinuate)
+(require 'planner-appt)
+(planner-appt-use-tasks)
+(planner-appt-insinuate)
+(require 'planner-cyclic)
+(planner-appt-schedule-cyclic-insinuate)
+(planner-appt-calendar-insinuate)
+(require 'planner-timeclock-summary)
+(planner-timeclock-summary-insinuate)
+(require 'planner-timeclock-summary-proj)
+(planner-timeclock-summary-proj-insinuate)
+(require 'planner-schedule)
+(require 'planner-bbdb)
+(require 'planner-erc)
+(require 'planner-bookmark)
+(require 'remember-planner)
+(require 'planner-log-edit)
+(planner-install-extra-task-keybindings)
+(planner-install-extra-context-keybindings)
+(require 'planner-trunk)
+(require 'planner-multi)
+
+; Local functions for planner
+
+(defvar my-planner-week-summary-buffer
+  "Week-%Y-%U.muse")
+
+(defvar my-planner-week-summary-regexp
+  "Week-\\([0-9]{4}\\)-\\([0-5][0-9]\\)\\.muse")
+  
+(defun first-day-of-the-week (date)
+  (progn 
+    ;; (SEC MINUTE HOUR DAY MONTH YEAR DOW DST ZONE)
+    (setcar (nthcdr 3 date)
+	    (- (elt date 3)
+	       (elt date 6)))
+    (setcar (nthcdr 6 date) 0)
+    (apply 'encode-time date)))
+
+(defun last-day-of-the-week (date)
+  (progn 
+    ;; (SEC MINUTE HOUR DAY MONTH YEAR DOW DST ZONE)
+    (setcar (nthcdr 3 date)
+	    (+ (elt date 3)
+	       (- 6 (elt date 6))))
+    (setcar (nthcdr 6 date) 6)
+    (apply 'encode-time date)))
+
+(defun my-planner-file-to-date (filename)
+  (let ((calendar-date
+	 (planner-filename-to-calendar-date filename)))
+    (decode-time (encode-time 0 0 0 (elt calendar-date 1)
+		      (elt calendar-date 0) (elt calendar-date 2)))))
+
+(defun my-planner-week-summary (week-day)
+  (interactive (list (planner-read-date "Select a day of the week" t)))
+  (let ((date
+	 (my-planner-file-to-date week-day)))
+  (planner-timeclock-summary-show-range 
+   (planner-date-to-filename (first-day-of-the-week date))
+   (planner-date-to-filename (last-day-of-the-week date)))))
+
+;;;_ redefinition of planner-maybe-remove-file 
+;;
+;; The kill-buffer of this function make me crazy.  I modify it so you
+;; can change it's behavior using this custom variable.  Personnaly, I
+;; used ignore and let emacs ask me to save it when I kill it.  Take
+;; also note that I change the regexp to remove any file that only
+;; have empty section (section with just a first level heading).  This
+;; is to cope with the new Events and Schedule sections.
+
+(defcustom planner-not-empty-file 'kill-this-buffer
+  "Command to run when a planner file is not empty.  Can be
+kill-this-buffer, save-buffer or ignore for example."
+  :type 'function
+  :group 'planner)
+
+(defvar local-planner-empty-line-regexp "\\(\\* .*\\|[[:space:]]*\\|No entries[[:space:]]*\\)")
+(defvar planner-empty-file-regexp 
+  (concat "\\(^" local-planner-empty-line-regexp
+          "\n\\)*[[:space:]]*\\'"))
+
+; redefinition
+
+(defun planner-maybe-remove-file ()
+  "This function remove the file if it contains only first level
+headings and empty lines."
+  (interactive)
+  (goto-char (point-min))
+  (if (looking-at planner-empty-file-regexp)
+      (let ((filename buffer-file-name))
+	(set-buffer-modified-p nil)
+	(kill-buffer (current-buffer))
+	(delete-file filename))
+    (funcall planner-not-empty-file)))
+
+;;;_ Planner automatic retrunl
+
+;; Should all been rework because planner-trunk just
+;; look for Projects page.
+
+;; (defun my-planner-trunk-tasks-build-rules ()
+;;   (let ((rule-set nil))
+;;     (save-excursion
+;;       (save-restriction
+;; 	(when (planner-narrow-to-section 'tasks)
+;; 	  (goto-char (point-min))
+;; 	  (while (not (equal (point-max) (point)))
+;; 	    (let ((current-task (planner-task-description 
+;; 				 (planner-current-task-info))))
+;; 	      (if current-task
+;; 		  (if (string-match "|\\(.*\\)|" current-task)
+;; 		      (let ((category
+;; 			     (substring current-task 
+;; 					(match-beginning 1)
+;; 					(match-end 1))))		       
+;; 			(add-to-list 'rule-set
+;; 			      (list (format "|%s|" category)
+;; 					  category))))))
+;; 	    (forward-line)))))
+;;     rule-set))
+
+;; (defun my-planner-trunk-tasks (&optional force)
+;;   (interactive "P")
+;;   (let ((page-name (planner-page-name)))
+;;     (if (not (catch 'done 
+;; 	       (mapc (lambda (rule)
+;; 		       (if (string-match (car rule) page-name)
+;; 			   (if force
+;; 			       (progn 
+;; 				 (delq rule planner-trunk-rule-list)
+;; 				 (throw 'done nil))
+;; 			     (throw 'done t))))
+;; 		     planner-trunk-rule-list)
+;; 	       nil))
+;; 	(add-to-list 'planner-trunk-rule-list
+;; 		     (list (regexp-quote (planner-page-name)) 
+;; 			   nil (my-planner-trunk-tasks-build-rules))))
+;;       (planner-trunk-tasks force)))
+
+;;;_ Planner replan
+
+;; Remember last day of plan so that it can go back correctly in time.
+
+(defcustom my-planner-last-replan-day (calendar-current-date)
+  "Last day plan."
+  :type '(list
+	       (integer :tag "day")
+	       (integer :tag "month")
+	       (integer :tag "year")))
+
+(defun my-planner-replan ()
+  "Run plan with the last day checked."
+  (interactive)
+  (let ((current-date (calendar-current-date))
+	(number-of-days 0))
+    (setq number-of-days
+	  (- (calendar-absolute-from-gregorian current-date)
+	     (calendar-absolute-from-gregorian my-planner-last-replan-day)))
+    (if (> number-of-days 0)
+	(plan number-of-days))
+    (customize-save-variable 'my-planner-last-replan-day current-date)))
+
+(defun my-planner-page-template (sections)
+  "Function to create a planner page."
+  (mapconcat (lambda (section)
+	       (concat "* " section))
+	     sections "\n\n\n"))
+  
+(defun my-planner-day-page-template ()
+  "Function template to insert a planner day page."
+  (my-planner-page-template ["Évènements" "Tâches" "Rendez-vous" "Horaire" "Notes" "Activités"]))
+
+(defun my-planner-plan-page-template ()
+  "Function template to insert a planner day page."
+  (my-planner-page-template ["Tâches" "Notes" "Rapport d'activités"]))
+
+;;;_ Set the diary export file
+
+;; Should have been used with a (get-planner-default-directory) too.
+
+(setq planner-export-diary-number-of-days 7
+      diary-file "~/Plans/diary"
+      planner-export-diary-file "~/Plans/diary.planner")
+
+;; global key mapping
+
+(defvar my-planner-keymap
+  (let ((map (make-sparse-keymap)))
+    (mapcar
+     (lambda (args) 
+       (apply (lambda (key symbol)
+		(define-key map key symbol)) args))
+     '(("a" planner-create-task)
+       ("b" planner-create-task-from-buffer)
+       ("c" timeclock-change)
+       ("f" planner-appt-forthcoming-display)
+       ("p" planner-goto-plan-page)
+       ("i" timeclock-in)
+       ("j" planner-goto)
+       ("o" timeclock-out)
+       ("r" timeclock-reread-log)
+       ("s" planner-goto-today)
+       ("v" timeclock-status-string)
+       ("w" my-planner-week-summary)
+       ("x" planner-index)))
+    map)
+  "Global planner keymap I love to use.")
+
+(define-key ctl-x-map "t" my-planner-keymap)
+
+(provide 'my-planner)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lisp/my-python.el	Thu Oct 13 08:46:42 2011 -0400
@@ -0,0 +1,16 @@
+;; python-mode
+
+(autoload 'python-mode "python" "Python editing mode." t)
+(require 'python)
+(provide 'python-mode)
+
+;; pymacs
+(autoload 'pymacs-load "pymacs" nil t)
+(autoload 'pymacs-eval "pymacs" nil t)
+(autoload 'pymacs-apply "pymacs")
+(autoload 'pymacs-call "pymacs")
+
+(pymacs-load "bikeemacs" "brm-")
+(brm-init)
+
+(provide 'my-python)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lisp/my-shell.el	Thu Oct 13 08:46:42 2011 -0400
@@ -0,0 +1,12 @@
+;;;_ EShell configuration
+
+(setenv "EDITOR" "gnuclient")
+(setenv "VISUAL" "gnuclient")
+(setenv "DEBIAN_FRONTEND" "editor")
+(defun local-init-eshell ()
+  "Local customization of eshell."
+  (defsubst eshell/make (&rest args)
+    "run make in lisp compile."
+    (compile (join (push "make" args) " "))))
+
+(provide 'my-shell)
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lisp/my-vc.el	Thu Oct 13 08:46:42 2011 -0400
@@ -0,0 +1,22 @@
+;;;_ Version control
+
+(setq load-path
+      (cons "~/oss/emacs/lisp"
+      (cons "~/oss/emacs/lisp/psvn"
+      (cons "~/oss/emacs/lisp/svk"
+	    load-path))))
+
+(require 'vc-svk)
+(require 'darcsum)
+;(require 'dvc)
+;(require 'vc-svn)
+;(require 'vc-svk2)
+(require 'psvn)
+(require 'psvn-svk)
+
+(defalias 'svk-status 'svn-status)
+
+; Add by psvn-svk
+;(add-to-list 'vc-handled-backends 'SVK)
+
+(provide 'my-vc)
\ No newline at end of file