;;; ravi-init-org.el --- org initialization ;; Copyright (C) 2014 ;; Author: ;; Keywords: ;; This program is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with this program. If not, see . ;;; Commentary: ;; Org mode initialization ;;; Code: ;; This brings in emacs-zmq, which requires static libstdc++.a (use-package jupyter :commands (jupyter-run-server-repl jupyter-run-repl jupyter-server-list-kernels)) (defconst ravi/mathjax-v3-file "./MathJax/tex-chtml-full.js" "MathJax file for v3") (defconst ravi/mathjax-v2-file "./MathJax/MathJax.js?config=TeX-AMS-MML_HTMLorMML" "MathJax file for v2") ;; https://emacs.stackexchange.com/questions/20574/default-inline-image-background-in-org-mode (defvar ravi/inline-image-background nil "The color used as the default background for inline images. When nil, use the default face background.") (defun ravi/create-image-with-background-color (args) "Specify background color of Org-mode inline image through modify `ARGS'." (let* ((file (car args)) (type (cadr args)) (data-p (caddr args)) (props (cdddr args))) ;; Get this return result style from `create-image'. (append (list file type data-p) (list :background (or ravi/inline-image-background (face-background 'default))) props))) (advice-add 'create-image :filter-args #'ravi/create-image-with-background-color) (use-package org :ensure org-plus-contrib :mode ("\\.org\\'" . org-mode) ;; The following lines are always needed. Choose your own keys. :bind (("C-c l" . org-store-link) ("H-o" . org-capture) ("H--" . org-agenda)) :config (progn (use-package htmlize :ensure t) (use-package ox-reveal :config (setq org-reveal-slide-number nil) (setq org-reveal-theme "night") (setq org-reveal-transition "linear") (setq org-reveal-mathjax t) (setq org-reveal-mathjax-url ravi/mathjax-v3-file)) (use-package ox-rst) (use-package ox-impress-js :disabled t) ;; Default file locations (setq org-directory "~/Documents/org") (defvar ravi/one-org-agenda-file (expand-file-name "agenda.files" org-directory)) (setq org-agenda-files ravi/one-org-agenda-file) (unless (file-exists-p ravi/one-org-agenda-file) ;; http://stackoverflow.com/a/14072295/1219634 ;; touch `ravi/one-org-agenda-file' (write-region "" :ignore ravi/one-org-agenda-file)) (setq org-default-notes-file (expand-file-name "notes.org" org-directory)) (setq org-refile-targets '((nil :maxlevel . 3) (org-agenda-files :maxlevel . 3))) (setq org-src-fontify-natively t) (setq org-modules '(ol-bbdb ol-bookmark ol-git-link ol-info ol-man org-id)) (setq org-use-speed-commands t) ;; Respect theme for code block output if enabled ;; https://emacs.stackexchange.com/questions/3374/set-the-background-of-org-exported-code-blocks-according-to-theme ;; Code above was modified to ;; - use hexadecimal color values to avoid color names ;; - modify org-html-head-extra only if colors were not already present; otherwise ;; we end up appending to it on every export (defvar ravi/org-html-code-block-parameter-set nil "Set foreground and background for code blocks according to theme") (defun ravi/org-inline-css-hook (exporter) "Insert custom inline css to automatically set the background of code according to theme" (when (and (eq exporter 'html) ;; To do: only if htmlize is used ravi/org-html-code-block-parameter-set) (let* ((converter (lambda (x) (apply #'color-rgb-to-hex (flatten-list (list (color-name-to-rgb x) 2))))) (pre-bg (funcall converter (face-background 'default))) (pre-fg (funcall converter (face-foreground 'default))) (extra (format "\n" pre-bg pre-fg))) (unless (and org-html-head-extra (string-match (regexp-quote extra) org-html-head-extra)) (set (make-local-variable 'org-html-head-extra) (concat org-html-head-extra extra)))))) (add-hook 'org-export-before-processing-hook 'ravi/org-inline-css-hook) (defun ravi/org-color-customization () "Color customization for org mode" (setq ravi/org-html-code-block-parameter-set t) (set (make-local-variable 'ravi/inline-image-background) "white")) (add-hook 'org-mode-hook #'ravi/org-color-customization) ;; don't prompt me to confirm everytime I want to evaluate a block (setq org-confirm-babel-evaluate nil) ;; display/update images in the buffer after I evaluate (add-hook 'org-babel-after-execute-hook 'org-display-inline-images 'append) ;; Needs java-$VERSION-openjdk or equivalent (defvar ravi/plantuml-jar-path "/usr/share/java/plantuml.jar" "Path to plantuml jar file") (setq org-plantuml-jar-path ravi/plantuml-jar-path) (defvar ravi/ditaa-jar-path "/usr/share/java/ditaa.jar" "Path to ditaa jar file") (setq org-ditaa-jar-path ravi/ditaa-jar-path) (add-to-list 'org-src-lang-modes '("plantuml" . plantuml)) (org-babel-do-load-languages 'org-babel-load-languages '((python . t) (shell . t) (latex . t) (ditaa . t) (dot . t) (plantuml . t) (emacs-lisp . t) (jupyter . t))))) ; jupyter must be last (use-package org-capture :defer t :ensure nil :config (when (fboundp 'ravi/setup-org-capture) (ravi/setup-org-capture))) (provide 'ravi-init-org) ;;; ravi-init-org.el ends here