Add Emacs lisp files.
--- /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