;;; jlj-org.el --- Customize my org setup -*- lexical-binding: t -*- ;;; Commentary: ;; Anything that customizes org-mode goes here. ;; this could probably be cleaned up more but its fine for now. ;;; Code: ;; Initialise installed packages (use-package org :ensure t :config (progn ;;Org mode configuration (require 'org) ; Enable Org mode (setq ispell-program-name "/usr/local/bin/ispell") ; set flyspell's spellchecker (add-hook 'org-mode-hook 'turn-on-flyspell) ; enable flyspell-mode in all org-mode enabled files (setq org-src-fontify-natively t org-src-window-setup 'current-window org-src-strip-leading-and-trailing-blank-lines t org-src-preserve-indentation t org-src-tab-acts-natively t x-selection-timeout 10 ;; this fixes a freeze when org-capture is called. lol. org-edit-src-content-indentation 0) (add-hook 'org-agenda-mode-hook (lambda () (visual-line-mode -1) (toggle-truncate-lines 1))) (org-babel-do-load-languages 'org-babel-load-languages '((python . t) (matlab . t) (restclient . t) (shell . t))) ;; log state changes to a drawer (setq org-log-into-drawer t) ;; org-agenda configs (setq org-habit-show-habits-only-for-today nil) (setq org-agenda-repeating-timestamp-show-all nil) (setq org-deadline-warning-days 1) (setq org-global-properties '(("Effort_ALL". "0 0:10 0:30 1:00 2:00 3:00 4:00"))) (setq org-columns-default-format '(("%25ITEM %TODO %3PRIORITY %TAGS"))) ;; have to add _archive or beorg throws a fit!!! it doesn't work on tags the dumby! (setq org-archive-location "~/Sync/Documents/org/archive.org_archive::* From %s") ;;;; custom org mode hotkeys (global-set-key "\C-cl" 'org-store-link) (global-set-key "\C-ca" 'org-agenda) (global-set-key "\C-cc" 'org-capture) (global-set-key "\C-cb" 'org-iswitchb) ;;;; search across agenda files when refiling: (setq org-refile-targets '((nil :maxlevel . 9) (org-agenda-files :maxlevel . 9))) (setq org-outline-path-complete-in-steps nil) ; Refile in a single go (setq org-refile-use-outline-path t) ; Show full paths for refiling (setq org-agenda-files '("~/Sync/Documents/org/")) ; add files to agenda: (setq org-directory "~/Sync/Documents/org/") ; define generic org capture shit (setq org-default-notes-file (concat org-directory "/refile-beorg.org")))) ;; setup special block extras! (use-package org-special-block-extras :ensure t :hook (org-mode . org-special-block-extras-mode) :custom ;; The places where I keep my ‘#+documentation’ (org-special-block-extras--docs-libraries '("~/Sync/Documents/org/documentation.org")) ;; Disable the in-Emacs fancy-links feature? ;; (org-special-block-extras-fancy-links nil) ;; Details heading “flash pink” whenever the user hovers over them? (org-html-head-extra (concat org-html-head-extra "")) ;; The message prefixing a ‘tweet:url’ badge (org-special-block-extras-link-twitter-excitement "This looks super neat (•̀ᴗ•́)و:") :config ;; Use short names like ‘defblock’ instead of the fully qualified name ;; ‘org-special-block-extras-defblock’ (org-special-block-extras-short-names)) ;; Set up bullets (use-package org-bullets :ensure t :config (add-hook 'org-mode-hook (lambda () (org-bullets-mode 1)))) (use-package ob-restclient :ensure t :after org) ;; configure the org protocol (org-load-modules-maybe t) (require 'org-protocol) ;; (require 'org-protocol-capture-html) (setq org-protocol-default-template-key "w") (setq org-capture-templates `(("w" "Web site" entry (file+olp "~/Sync/Documents/org/webwiki.org" "links" "unsorted") "* %c :website:\n%U %?%:initial") ;; ... more templates here ... ("b" "Book - capture a book you've read" entry (file+olp "~/Sync/Documents/org/webwiki.org" "books") "* %^{TITLE} \n :PROPERTIES:\n:AUTHOR: %^{AUTHOR}\n:GENRE: %^{GENRE}\n:FINISHED: %U \n:END:\n " :empty-lines 1 :prepend t) ("c" "Context-include Todo" entry (file "~/Sync/Documents/org/refile-beorg.org") "* TODO %?\n%U \n '%a'" :empty-lines 1 :prepend t) ("q" "quotes" entry (file+olp "~/Sync/Documents/org/webwiki.org" "quotes") "* %?\n%U \n " :empty-lines 1 :prepend t) ("t" "Todo" entry (file "~/Sync/Documents/org/refile-beorg.org") "* TODO %?\n%U" :empty-lines 1 :prepend t))) ;; configure org exporters (require 'ox-md) ;; org prettifiers (setq org-agenda-format-date (lambda (date) (concat "\n" (make-string (window-width) 9472) "\n" (org-agenda-format-date-aligned date)))) ;; org mode hack for screenshots; see org mode hacks page. (defun my-org-screenshot () "Take a screenshot and save a file. The file is saved into a time stamped unique-named file in the same directory as the buffer. Then insert a link to this file.reference: https://orgmode.org/worg/org-hacks.html dependency: this relies on imagemagick" (interactive) (setq filename (concat (make-temp-name (concat "pictures" (buffer-file-name) "_" (format-time-string "%Y%m%d_%H%M%S_")) ) ".png")) (if (eq system-type 'darwin) (shell-command (format "screencapture -i %s" filename)) (call-process "import" nil nil nil filename)) (insert (concat "[[" filename "]]")) (org-display-inline-images)) (if (eq system-type 'darwin) (global-set-key (kbd "C-c C-M-4") 'my-org-screenshot) (global-set-key (kbd "C-c C-4") 'my-org-screenshot)) ;; force source blocks to respect the proper indentation. (setq org-src-preserve-indentation nil org-edit-src-content-indentation 0) ;; calender integration (use-package org-caldav :ensure t :config (setq org-caldav-sync-direction 'cal->org) (setq org-caldav-url "https://caldav.fastmail.com/dav/calendars/user/me@jowj.net/") (setq org-caldav-calendars '((:calendar-id "654a6e55-b777-4603-b009-0058d35aa5ca" :inbox "~/Sync/Documents/org/fromworkcal.org"))) (setq org-icalendar-timezone "America/Chicago")) ;;; jlj-org.el ends here