;;; ... -*- lexical-binding: t -*- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Org-mode configuration ;;; ;; Setup org-mode (require 'org) ;;(org-remember-insinuate) (add-to-list 'auto-mode-alist '("\\.org$" . org-mode)) (define-key global-map [(control meta ?r)] 'remember) (define-key mode-specific-map [?a] 'org-agenda) (define-key org-mode-map [(meta left)] 'backward-word) (define-key org-mode-map [(meta right)] 'forward-word) ;; org-mode directory might be mounted in a different place depending ;; on which system we're running on (setq drkp:org-dir nil) (cond ((or (string= user-login-name "org") (string= user-login-name "www")) (setq drkp:org-dir "/usr/local/www/dav/org/")) ;; ((file-exists-p "/Volumes") ;; (setq drkp:org-dir "/Volumes/org/")) (t (setq drkp:org-dir "/ssh:org@clamshell.ambulatoryclam.net:/usr/local/www/dav/org/"))) ;; (t ;; (dolist (x '("/mnt/org/" "/sshfs/org/")) ;; (if (and (not drkp:org-dir) ;; (file-exists-p x)) ;; (setq drkp:org-dir x))))) (setq drkp:org-mobile-dir (concat drkp:org-dir "mobile/")) ;; File locations (setq org-agenda-files (list drkp:org-dir) org-default-notes-file (concat drkp:org-dir "unfiled.org") org-directory drkp:org-dir org-mobile-directory drkp:org-mobile-dir org-mobile-inbox-for-pull (concat drkp:org-dir "unfiled.org")) ;; Miscellaneous interface stuff (setq org-hide-leading-stars t org-startup-indented t org-odd-levels-only nil ; redundant with org-startup-indented org-startup-folded 'content) ;; Todo (setq org-enforce-todo-dependencies t org-todo-keywords '((sequence "TODO" "STARTED(s!)" "WAITING(w!)" "DELEGATED(l!)" "APPT" "|" "DONE(d!)" "DEFERRED(f!)" "CANCELLED(c!)")) org-use-fast-todo-selection t org-log-done t org-log-reschedule t org-log-redeadline t org-log-into-drawer "LOGBOOK") ;; Agenda views (setq org-agenda-dim-blocked-tasks t ; 'invisible org-agenda-skip-deadline-if-done t org-agenda-skip-scheduled-if-deadline-is-shown t org-deadline-warning-days 7 org-agenda-default-appointment-duration 60) ;; Goto and refile (setq org-goto-interface 'outline-path-completion org-refile-targets '((org-agenda-files :maxlevel . 5)) org-refile-use-outline-path 'file ; use 'file for filenames org-refile-allow-creating-parent-nodes 'confirm) ;; Remember (setq org-remember-store-without-prompt nil org-remember-templates (list (list "todo" 116 "* TODO %? %u " (concat drkp:org-dir "unfiled.org") nil nil) (list "note" 110 "* %u %?\" " (concat drkp:org-dir "unfiled.org") nil nil) (list "appt" 97 "* APPT %? %u" (concat drkp:org-dir "unfiled.org") nil nil))) ;; iCal export (setq org-icalendar-use-scheduled '(todo-start) org-icalendar-include-todo 'all org-icalendar-store-UID t) ;; Set up auto-saving and auto-reverting of org-mode files for shared ;; access. (load "actually-autosave-mode") (setq actually-autosave-interval 15) (setq actually-autosave-only-when-idle t) (add-hook 'org-mode-hook 'turn-on-auto-revert-mode) (add-hook 'org-mode-hook 'turn-on-actually-autosave-mode) (defadvice ask-user-about-supersession-threat (around drkp:auto-revert-org-mode) "Auto-revert obsolete buffers in org-mode" (message "advice") (if (eq major-mode 'org-mode) (if (buffer-modified-p) ad-do-it (progn (message "Auto-reverting buffer on supersession") (revert-buffer nil t))) ad-do-it)) ;; Flag to indicate whether we're currently executing an ;; org-agenda-redo so we don't trigger another on revert (setq drkp:skip-agenda-redo-on-revert nil) (defadvice file-remote-p (around drkp:fake-file-not-remote-once) 'disable "Always return false the first time. Then disable this advice so file-remote-p works normally." (ad-disable-advice 'file-remote-p 'around 'drkp:fake-file-not-remote-once) (ad-activate 'file-remote-p) nil) (defadvice auto-revert-handler (before drkp:auto-revert-remote-files-hack) "Tell auto-revert-handler that file is not remote." (ad-enable-advice 'file-remote-p 'around 'drkp:fake-file-not-remote-once) (ad-activate 'file-remote-p)) (ad-activate 'auto-revert-handler) (defadvice org-agenda-redo (before drkp:org-agenda-revert-buffers) (let ((drkp:skip-agenda-redo-on-revert 't)) (dolist (file (org-agenda-files nil 'ifmode)) (let ((buffer (get-file-buffer file))) (if (and buffer (not (eq buffer (current-buffer)))) (with-current-buffer buffer (auto-revert-handler))))))) (ad-activate 'org-agenda-redo) ;; Automatically rebuild agenda when reverting an buffer if it's open (defun drkp:org-rebuild-agenda-maybe () (if (and (not drkp:skip-agenda-redo-on-revert) (eq major-mode 'org-mode) (not (null (get-buffer-window org-agenda-buffer-name t)))) ;; Try to revert any other open agenda buffers (with-current-buffer org-agenda-buffer-name (org-agenda-redo)))) (add-hook 'after-revert-hook 'drkp:org-rebuild-agenda-maybe) ;; Function to run via cron to sync via mobileorg (defun drkp:org-sync () (save-excursion (find-file (concat drkp:org-dir "/index.org")) (org-mobile-pull) (org-mobile-push) (org-export-icalendar-all-agenda-files)))