;;; mitch-orgstuff.el --- Hacking on top of Org mode. ;;; Commentary: ;; Some of the things I want to do with org aren't built-in or intended. This ;; file is the cum total of my intent to implement these things. ;;; Code: (defvar org-directory (expand-file-name "org/" "~")) (defvar org-agenda-files '("~/org/")) (defvar org-vw-dir org-directory) ;; whoops (defvar org-wiki-regex "\\`[^.].*\\.org\\'") (defun org-vw-get-filename (word) "Given WORD, generate the absolute filename for that org-vw entry." (expand-file-name (format "%s.org" (downcase word)) org-vw-dir)) ;; (org-vw-get-filename "wordWERD") (defun org-vw-make-newlink () "Make the word at point the link to an org file, like in VimWiki." (interactive) (let* ((oldpoint (point)) (current-word (thing-at-point 'word 'no-properties)) (cw-file-name (org-vw-get-filename current-word))) (backward-word) (kill-word 1) (org-insert-link nil cw-file-name current-word) (goto-char oldpoint))) ;; (org-insert-link nil "~/" "a file or sth") (defun org-vw-show-markup () ;;broken, just use org-appear or sth "When on a line containing hidden characters, show them." (interactive) (let ((point (point)) (bol (point-at-bol)) (eol (point-at-eol))) (remove-text-properties bol eol '(invisible nil)) t)) (defun org-vw-back () "Go back to the previous org file and bury this buffer." (interactive) (if (buffer-modified-p) (if (y-or-n-p "Do you want to save this file?") (save-buffer))) (bury-buffer) (other-window 1)) (define-minor-mode org-vw-mode "Org VimWiki mode." :lighter " VW" :keymap (make-sparse-keymap) ;; This is a hack, because hyperbole is scary. Ideal implementation would add ;; a proper case rather than this weird fallback. (require 'hyperbole) (make-local-variable action-key-default-function) (setq-local action-key-default-function #'org-vw-make-newlink) ;; General: (general-define-key :keymaps 'local :states 'normal "DEL" 'org-vw-back)) ;; (add-to-list 'auto-mode-alist `(,org-wiki-regex . org-vw-mode)) (add-hook 'org-mode-hook #'org-vw-mode) ;; ------------------ ABANDON ALL SANITY, YE WHO ENTER HERE -------------------- ;; Below, I attempt to generalize tangling a whole directory of org files into ;; whichever export format, and then apply that. ;; (require 'ox-hugo) ;; --------- LET THY BRAIN NO LONGER TREMBLE, FOR I AM BECOME COMPLETE --------- (defun mitch-insert-current-datetime () "Insert the current date and time in my preffered format, with a newline at the end." (interactive) (insert (format "%s %s\n" (calendar-date-string (calendar-current-date)) (format-time-string "%-l:%M %p")))) (defun mitch-2nd-heading-now () "Insert a brand new 2nd level Org heading containing the current date/time. Start insert mode." (interactive) (insert "** ") (mitch-insert-current-datetime) (evil-insert 1)) (provide 'mitch-orgstuff) ;;; mitch-orgstuff.el ends here