From 1f18a2fef49e98ac2f717212d8c8776606d837d1 Mon Sep 17 00:00:00 2001 From: Ivan Malison Date: Fri, 5 Dec 2014 15:05:18 -0800 Subject: [PATCH] tweak org stuff, more helm-org-habits work. --- dotfiles/emacs.d/init.el | 23 +++++++++++++++++-- dotfiles/emacs.d/load.d/helm-org-headlines.el | 18 ++++++++------- 2 files changed, 31 insertions(+), 10 deletions(-) diff --git a/dotfiles/emacs.d/init.el b/dotfiles/emacs.d/init.el index bde198f6..1ae4ac1e 100644 --- a/dotfiles/emacs.d/init.el +++ b/dotfiles/emacs.d/init.el @@ -160,7 +160,26 @@ (let ((org-todo-log-states (mapcar (lambda (state) (list state 'note 'time)) - (apply 'append org-todo-sets)))))) + (apply 'append org-todo-sets)))) + (cond ((eq major-mode 'org-mode) (org-todo)) + ((eq major-mode 'org-agenda-mode) (org-agenda-todo))))) + +(defun org-todo-force-notes () + (interactive) + (let ((org-todo-log-states + (mapcar (lambda (state) + (list state 'note 'time)) + (apply 'append org-todo-sets)))) + (org-todo) + )) + +(defun org-agenda-todo-force-notes () + (interactive) + (let ((org-todo-log-states + (mapcar (lambda (state) + (list state 'note 'time)) + (apply 'append org-todo-sets)))) + (org-agenda-todo))) (defun org-todo-no-note () (interactive) @@ -589,7 +608,7 @@ The current directory is assumed to be the project's root otherwise." :config (progn (setq org-habit-graph-column 50) - (setq org-habit-show-habits-only-for-today nil) + (setq org-habit-show-habits-only-for-today t) (unless (boundp 'org-gtd-file) (defvar org-gtd-file "~/org/gtd.org")) (unless (boundp 'org-habits-file) diff --git a/dotfiles/emacs.d/load.d/helm-org-headlines.el b/dotfiles/emacs.d/load.d/helm-org-headlines.el index 32154580..9790c2f2 100644 --- a/dotfiles/emacs.d/load.d/helm-org-headlines.el +++ b/dotfiles/emacs.d/load.d/helm-org-headlines.el @@ -2,7 +2,6 @@ (interactive) (helm :sources (helm-source-org-headlines-for-files org-agenda-files))) - (defun helm-org-goto-marker (marker) (switch-to-buffer (marker-buffer marker)) (goto-char (marker-position marker)) @@ -13,7 +12,7 @@ (unless min-depth (setq min-depth 1)) (unless max-depth (setq max-depth 8)) (helm-build-sync-source "Org Headlines" - :candidates (helm-org-get-candidates filenames) + :candidates (helm-org-get-candidates filenames min-depth max-depth) :action 'helm-org-goto-marker :action-transformer (lambda (actions candidate) @@ -25,22 +24,25 @@ (defun helm-org-headline-refile (marker) (with-helm-current-buffer (org-cut-subtree)) - (helm-org-goto-marker marker) - (goto-char (marker-position marker)) - (let (destination-level (org-current-level)) + (let ((target-level (with-current-buffer (marker-buffer marker) + (goto-char (marker-position marker)) + (org-current-level)))) + (helm-org-goto-marker marker) (org-end-of-subtree t t) - (org-paste-subtree (+ destination-level 1)))) + (org-paste-subtree (+ target-level 1)))) -(defun helm-org-get-candidates (filenames) +(defun helm-org-get-candidates (filenames min-depth max-depth) (-flatten (mapcar (lambda (filename) (helm-get-org-candidates-in-file filename min-depth max-depth)) - org-agenda-files))) + filenames))) (defun helm-get-org-candidates-in-file (filename min-depth max-depth) (with-current-buffer (find-file-noselect filename) (save-excursion (beginning-of-buffer) (cl-loop while (re-search-forward org-complex-heading-regexp nil t) + if (let ((num-stars (length (match-string-no-properties 1)))) + (and (>= num-stars min-depth) (<= num-stars max-depth))) collect `(,(match-string-no-properties 0) . ,(point-marker))))))