diff --git a/modules/org/org-present/autoload.el b/modules/org/org-present/autoload.el index d6831873e..b50786d45 100644 --- a/modules/org/org-present/autoload.el +++ b/modules/org/org-present/autoload.el @@ -1,53 +1,18 @@ ;;; org/org-present/autoload.el -*- lexical-binding: t; -*- -;;;###autoload -(defun +doom-present*org-tree-slide-narrow-exclude-header (orig-fn &rest args) - "TODO" - (cl-letf (((symbol-function 'org-narrow-to-subtree) - (lambda () (save-excursion - (save-match-data - (org-with-limited-levels - (narrow-to-region - (progn (org-back-to-heading t) - (forward-line 1) - (point)) - (progn (org-end-of-subtree t t) - (when (and (org-at-heading-p) (not (eobp))) (backward-char 1)) - (point))))))))) - (apply orig-fn args))) - -;;;###autoload -(defun +org-present|org-tree-prepare-window () - "TODO" - (doom/window-zoom) - (let ((arg (if org-tree-slide-mode +1 -1))) - (when (fboundp 'centered-window-mode) - (centered-window-mode arg)) - (window-divider-mode (* arg -1)) - (doom-hide-modeline-mode arg) - (+org-pretty-mode arg) - (cond (org-tree-slide-mode - (org-indent-mode -1) - (text-scale-set +org-present-text-scale) - (ignore-errors (org-toggle-latex-fragment '(4))) - (set-face-attribute 'org-level-2 nil :height 1.4)) - (t - (org-indent-mode +1) - (text-scale-set 0) - (org-remove-latex-fragment-image-overlays) - (set-face-attribute 'org-level-2 nil :height 1.0) - (+org-present|remove-overlays) - (org-remove-inline-images))))) - (defvar +org-present--overlays nil) ;;;###autoload -(defun +org-present/org-tree-slides () +(defun +org-present/start () + "TODO" (interactive) (unless (derived-mode-p 'org-mode) (error "Not in an org buffer")) (call-interactively 'org-tree-slide-mode) (add-hook 'kill-buffer-hook '+org-present--cleanup-org-tree-slides-mode)) + +;; --- Hooks ------------------------------ + ;;;###autoload (defun +org-present|add-overlays () (add-to-invisibility-spec '(+org-present)) @@ -75,6 +40,37 @@ (text-scale-set 10) (text-scale-set +org-present-text-scale))) +;;;###autoload +(defun +org-present|init-org-tree-window () + "Set up the org window for presentation." + (doom/window-zoom) + (let ((cwm-use-vertical-padding t) + (cwm-frame-internal-border 110) + (cwm-left-fringe-ratio -10) + (cwm-centered-window-width 240) + (arg (if org-tree-slide-mode +1 -1))) + (when (fboundp 'centered-window-mode) + (centered-window-mode arg)) + (window-divider-mode (* arg -1)) + (doom-hide-modeline-mode arg) + (+org-pretty-mode arg) + (cond (org-tree-slide-mode + (org-indent-mode -1) + (text-scale-set +org-present-text-scale) + (ignore-errors (org-toggle-latex-fragment '(4))) + (set-face-attribute 'org-level-2 nil :height 1.4)) + (t + (org-indent-mode +1) + (text-scale-set 0) + (org-remove-latex-fragment-image-overlays) + (set-face-attribute 'org-level-2 nil :height 1.0) + (+org-present|remove-overlays) + (org-remove-inline-images))))) + + + +;; --- Helpers ---------------------------- + (defun +org-present--cleanup-org-tree-slides-mode () (unless (cl-loop for buf in (doom-buffers-in-mode 'org-mode) if (buffer-local-value 'org-tree-slide-mode buf) @@ -86,3 +82,22 @@ (let ((overlay (make-overlay beg end))) (push overlay +org-present--overlays) (overlay-put overlay 'invisible '+org-present))) + + +;; --- Advice ----------------------------- + +;;;###autoload +(defun +org-present*narrow-to-subtree (orig-fn &rest args) + "Narrow to the target subtree when you start the presentation." + (cl-letf (((symbol-function 'org-narrow-to-subtree) + (lambda () (save-excursion + (save-match-data + (org-with-limited-levels + (narrow-to-region + (progn (org-back-to-heading t) + (forward-line 1) + (point)) + (progn (org-end-of-subtree t t) + (when (and (org-at-heading-p) (not (eobp))) (backward-char 1)) + (point))))))))) + (apply orig-fn args))) diff --git a/modules/org/org-present/config.el b/modules/org/org-present/config.el index 7d9b23192..560cd8dc3 100644 --- a/modules/org/org-present/config.el +++ b/modules/org/org-present/config.el @@ -32,18 +32,12 @@ (add-hook! 'org-tree-slide-mode-after-narrow-hook #'(+org-present|detect-slide +org-present|add-overlays org-display-inline-images)) - (add-hook 'org-tree-slide-mode-hook #'+org-present|org-tree-prepare-window) + (add-hook 'org-tree-slide-mode-hook #'+org-present|init-org-tree-window) (advice-add #'org-tree-slide--display-tree-with-narrow - :around #'+doom-present*org-tree-slide-narrow-exclude-header)) + :around #'+org-present*narrow-to-subtree)) -(def-package! centered-window-mode - :commands centered-window-mode - :config - (setq cwm-use-vertical-padding t - cwm-frame-internal-border 110 - cwm-left-fringe-ratio -10 - cwm-centered-window-width 240)) +(def-package! centered-window-mode :commands centered-window-mode) ;; @@ -52,8 +46,5 @@ (defun +org-present|init () (require 'ox-reveal) - - (map! :map org-mode-map - "" #'+org-present/org-tree-slides - "" #'+org-present/next)) + (map! :map org-mode-map "" #'+org-present/start))