Presentations in Org-Mode
I recently came up with my own take on doing presentations using org-mode. There
are probably far better approaches and feature-rich packages out there, but at
this point it's all about fun. The fw/org-present-mode minor mode narrows down
an org document to the current subtree when pressing F5. Afterwards you can use
the left/right arrow keys to jump to the next/previous subtree at the same
level. Pressing F5 a second time quits the minor mode.
(define-minor-mode fw/org-present-mode
"Do a presentation based on an org-mode file."
:lighter " fw/org-present"
:keymap (let ((map (make-sparse-keymap)))
(define-key map (kbd "<left>") 'fw/org-present-backward)
(define-key map (kbd "<right>") 'fw/org-present-forward)
map)
(defun fw/org-present-backward ()
(interactive)
(let ((inhibit-message t))
(widen)
(org-backward-heading-same-level 1)
(org-toggle-narrow-to-subtree)))
(defun fw/org-present-forward ()
(interactive)
(let ((inhibit-message t))
(widen)
(org-forward-heading-same-level 1)
(org-toggle-narrow-to-subtree)))
(toggle-frame-fullscreen)
(if (buffer-narrowed-p)
(progn
(kill-local-variable 'mode-line-format)
(read-only-mode -1)
(widen))
(progn
(setq-local mode-line-format nil)
(org-toggle-narrow-to-subtree)
(read-only-mode 1))))
(bind-keys ("<f5>" . fw/org-present-mode))