From abf97c386a8d554c517d7d5e327c06666ba1b372 Mon Sep 17 00:00:00 2001 From: Tom Willemse Date: Mon, 13 Jan 2020 22:51:39 -0800 Subject: Generate different colors for TODO keywords and tags --- oni-org/oni-org.el | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) (limited to 'oni-org/oni-org.el') diff --git a/oni-org/oni-org.el b/oni-org/oni-org.el index 71df80e..55b8217 100644 --- a/oni-org/oni-org.el +++ b/oni-org/oni-org.el @@ -4,7 +4,7 @@ ;; Author: Tom Willemse ;; Keywords: local -;; Version: 2020.0108.161333 +;; Version: 2020.0113.225010 ;; Package-Requires: (oni-yasnippet org-plus-contrib org-bullets hydra org-wild-notifier) ;; This program is free software; you can redistribute it and/or modify @@ -130,6 +130,37 @@ After running it once remove it from `org-capture-after-finalize-hook'." (interactive) (find-file (oni-org-expand-to-home "documents/gtd/index.org"))) +(defun oni-org-color-for (object) + "Generate a hex color by taking the first 6 characters of OBJECT’s MD5 sum." + (format "#%s" (substring (md5 object) 0 6))) + +(defun oni-org-generate-todo-keyword-faces () + "Create faces for all todo keywords in the current buffer." + (when-let ((keywords (cl-remove-if (lambda (tag) (assoc tag org-todo-keyword-faces)) + org-todo-keywords-1))) + (append org-todo-keyword-faces + (mapcar (lambda (keyword) (cons keyword (oni-org-color-for keyword))) + keywords)))) + +(defun oni-org-generate-tag-faces () + "Create faces for all the tags in the current buffer." + (when-let ((tags (cl-remove-if (lambda (tag) (assoc (car tag) org-tag-faces)) + (org-get-buffer-tags)))) + (append org-tag-faces + (mapcar (lambda (tag) + (let ((tag (car tag))) + (cons tag (oni-org-color-for tag)))) + tags)))) + +(defun oni-org-set-todo-keyword-faces () + "Set ‘org-todo-keyword-faces’ to all different colors." + (setq org-todo-keyword-faces (oni-org-generate-todo-keyword-faces))) + +(defun oni-org-set-tag-faces () + "Set ‘org-tag-faces’ to all different colors." + (setq org-tag-faces (oni-org-generate-tag-faces)) + (org-set-tag-faces 'org-tag-faces org-tag-faces)) + ;;;###autoload(autoload 'oni-hydra-org/body "oni-org") (defhydra oni-hydra-org (:color blue) "Org" @@ -203,6 +234,8 @@ After running it once remove it from `org-capture-after-finalize-hook'." (add-hook 'org-mode-hook 'auto-fill-mode) (add-hook 'org-mode-hook 'flyspell-mode) +(add-hook 'org-mode-hook #'oni-org-set-todo-keyword-faces) +(add-hook 'org-mode-hook #'oni-org-set-tag-faces) (unless (eq system-type 'windows-nt) (require 'org-bullets) -- cgit v1.2.3-54-g00ecf