Improve org integration

This commit is contained in:
Henrik Lissner 2015-11-23 15:21:24 -05:00
parent 1b67819fc7
commit 060f9cd9b1
6 changed files with 146 additions and 65 deletions

View file

@ -37,23 +37,109 @@
(defun org-invoice-complete-link ()
(narf/org-complete "invoice"))
;;; Deft
;;; Personal CRM
;; (defvar narf--helm-org-cache '())
(defvar narf--helm-org-files '())
(defun narf--helm-org-init ()
(setq narf--helm-org-files
(mapcar 'narf--helm-org-metadata
(f-entries narf--helm-org-dir (lambda (f) (and (f-ext? f "org") (> (f-size f) 0))) t))))
(defun narf--helm-org-metadata (file &optional params)
(let ((params (or params narf--helm-org-params))
(base (f-base file))
alist content title)
(with-temp-buffer
(insert-file-contents file nil nil nil t)
(setq content (concat (buffer-string))))
(setq title (let ((title (deft-parse-title file content)))
(if (string= title "")
"-"
title)))
(setq alist
(list file
(cons 'id (substring base 0 (string-match "-" base)))
(cons 'path file)
(cons 'title title)
(cons 'summary (truncate-string-to-width
(replace-regexp-in-string
"[\n\t]" " "
(if title
(if (string-match (regexp-quote "#+end_src") content)
(deft-chomp (substring content (match-end 0)
(string-match "^\\* " content (match-end 0))))
"")
content)
content)
(window-width)))))
(mapc (lambda (p)
(let ((value (if (string-match (concat "^" (symbol-name p) ": +\\(.*\\)$") content)
(substring content (match-beginning 1) (match-end 1)))))
(when value
(add-to-list 'alist (cons p value) t))))
params)
alist))
(defvar narf--helm-org-title "Org files")
(defvar narf--helm-org-dir org-directory)
(defvar narf--helm-org-params '(created contact email country issued paid))
(defun narf/helm-org-candidates ()
narf--helm-org-files)
(defun narf/helm-org-real-to-display (alist)
(format "[%s] [%s] %-20s -- (%s) %s"
(cdr-safe (assoc 'id alist))
(cdr-safe (assoc 'created alist))
(cdr-safe (assoc 'title alist))
(or (cdr-safe (assoc 'contact alist))
(cdr-safe (assoc 'email alist))
(cdr-safe (assoc 'country alist))
"")
(cdr-safe (assoc 'summary alist))))
(defun narf/helm-org-action (alist)
(find-file (cdr-safe (assoc 'path alist))))
(defun narf--helm-org ()
(require 'deft)
(helm :sources (helm-build-sync-source narf--helm-org-title
:init 'narf--helm-org-init
:candidates 'narf/helm-org-candidates
:real-to-display 'narf/helm-org-real-to-display
:action 'narf/helm-org-action)
:buffer "*helm-deft*"))
;;;###autoload
(defun narf/helm-org-index ()
(interactive)
(let ((narf--helm-org-dir org-directory)
(narf--helm-org-params '()))
(narf--helm-org)))
;;;###autoload
(defun narf/helm-org-projects ()
(interactive)
(narf/helm-org-search org-directory-projects))
(let ((narf--helm-org-dir org-directory-projects))
(narf--helm-org)))
;;;###autoload
(defun narf/helm-org-contacts ()
(interactive)
(narf/helm-org-search org-directory-contacts))
(let ((narf--helm-org-dir org-directory-contacts))
(narf--helm-org)))
;;;###autoload
(defun narf/helm-org-invoices ()
(interactive)
(narf/helm-org-search org-directory-invoices))
(let ((narf--helm-org-dir org-directory-invoices))
(narf--helm-org)))
;;;###autoload
(defun narf/helm-org-writing ()
(interactive)
(narf/helm-org-search (expand-file-name "writing/" org-directory)))
(let ((narf--helm-org-dir (expand-file-name "writing/" org-directory))
(narf--helm-org-params '()))
(narf--helm-org)))
(provide 'defuns-org-custom)
;;; defuns-org-custom.el ends here