From 989171268461a0069ecd53a49e6098ce08638102 Mon Sep 17 00:00:00 2001 From: Case Duckworth Date: Fri, 5 May 2023 09:58:21 -0500 Subject: changes --- lisp/acdw-org.el | 111 +++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 83 insertions(+), 28 deletions(-) (limited to 'lisp/acdw-org.el') diff --git a/lisp/acdw-org.el b/lisp/acdw-org.el index f961dda..2ec3339 100644 --- a/lisp/acdw-org.el +++ b/lisp/acdw-org.el @@ -137,19 +137,33 @@ itself. Other values of ARG will call `newline' with that ARG." ;;; Copy rich text to the keyboard + ;; Thanks to Oleh Krehel: ;; https://emacs.stackexchange.com/questions/54292/copy-results-of-org-export-directly-to-clipboard ;; So. Emacs can't do this itself because it doesn't support sending clipboard ;; or selection contents as text/html. We have to use xclip instead. +;; (defun org-to-html-to-clipboard (&rest org-export-args) +;; "Export current org buffer to HTML, then copy it to the clipboard. +;; ORG-EXPORT-ARGS are passed to `org-export-to-file'." +;; (let ((f (make-temp-file "org-html-export"))) +;; (apply #'org-export-to-file 'html f org-export-args) +;; (start-process "xclip" " *xclip*" +;; "xclip" "-verbose" "-i" f +;; "-t" "text/html" "-selection" "clipboard") +;; (message "HTML pasted to clipboard."))) + +;; Wayland version.. TODO: make it work for both (defun org-to-html-to-clipboard (&rest org-export-args) "Export current org buffer to HTML, then copy it to the clipboard. ORG-EXPORT-ARGS are passed to `org-export-to-file'." - (let ((f (make-temp-file "org-html-export"))) - (apply #'org-export-to-file 'html f org-export-args) - (start-process "xclip" " *xclip*" - "xclip" "-verbose" "-i" f - "-t" "text/html" "-selection" "clipboard") - (message "HTML pasted to clipboard."))) + (let ((buf (generate-new-buffer "*org-html-clipboard*" t))) + (apply #'org-export-to-buffer 'html buf org-export-args) + (with-current-buffer buf + (call-process-region (point-min) (point-max) + "wl-copy" nil nil nil + "-t" "text/html") + (kill-buffer-and-window)) + (message "HTML copied to clipboard."))) (defun org-subtree-to-html-to-clipboard () "Export current subtree to HTML." @@ -202,6 +216,33 @@ If LIST is non-nil, return the result as a list instead of a string." (unless (eq (char-after) ?:) ":")) (when (org-at-heading-p) (org-align-tags)))))) + +;;; Navigating headings + +(defun org-next-visible-heading-unfolding (arg) + (interactive "p") + (when (let ((pt (org-next-visible-heading arg))) + (and (buffer-narrowed-p) + (or (= (point) (point-min)) + (and pt + (= pt (point-max)))))) + (widen) + (org-next-visible-heading arg) + (org-narrow-to-subtree))) + +(defun org-previous-visible-heading-unfolding (arg) + (interactive "p") + (org-next-visible-heading-unfolding (- arg))) + +(defun org-up-heading-unfolding (arg) + (interactive "p") + (when (let ((pt (outline-up-heading arg))) + (and (buffer-narrowed-p) + (= (point) (point-min)))) + (widen) + (org-up-heading-unfolding arg) + (org-narrow-to-subtree))) + ;;; Misc. @@ -261,19 +302,20 @@ If LIST is non-nil, return the result as a list instead of a string." org-archive-mark-done t org-fold-catch-invisible-edits 'show-and-error org-clock-clocked-in-display 'mode-line - org-clock-string-limit 7 ; just the clock bit + org-clock-string-limit 0 org-clock-persist nil org-confirm-babel-evaluate nil org-cycle-separator-lines 0 org-deadline-warning-days 0 org-directory (sync/ "org/" t) org-ellipsis (or (bound-and-true-p truncate-string-ellipsis) "…") - org-emphasis-alist '(("*" org-bold) - ("/" org-italic) - ("_" org-underline) - ("=" org-verbatim) - ("~" org-code) - ("+" org-strikethrough)) + org-emphasis-alist + '(("*" org-bold) + ("/" org-italic) + ("_" org-underline) + ("=" org-verbatim) + ("~" org-code) + ("+" org-strikethrough)) org-fontify-done-headline t org-fontify-quote-and-verse-blocks t org-fontify-whole-heading-line t @@ -320,6 +362,9 @@ If LIST is non-nil, return the result as a list instead of a string." (keymap-set org-mode-map "S-" #'+org-table-copy-down|+org-return-dwim) (keymap-unset org-mode-map "C-'" t) (keymap-unset org-mode-map "C-," t) + (keymap-set org-mode-map "C-c C-n" #'org-next-visible-heading-unfolding) + (keymap-set org-mode-map "C-c C-p" #'org-previous-visible-heading-unfolding) + (keymap-set org-mode-map "C-c C-u" #'org-up-heading-unfolding) ;; Hooks (add-hook 'org-mode-hook (defun org-mode@setup () @@ -333,7 +378,8 @@ If LIST is non-nil, return the result as a list instead of a string." (add-hook 'before-save-hook (defun before-save@org-mode@before-save () (org-align-tags 'all) - (+org-hide-drawers-except-point)) + (+org-hide-drawers-except-point) + ) nil :local))) ;; Extra font-lock keywords (font-lock-add-keywords @@ -353,13 +399,15 @@ If LIST is non-nil, return the result as a list instead of a string." ("" . org-clock-in-or-out)) :config (setopt org-clock-clocked-in-display 'mode-line - global-mode-string - '((t jabber-activity-mode-string) - (:eval (when (org-clocking-p) org-mode-line-string)) - (display-time-mode display-time-string))) - (add-hook 'org-clock-in-hook (defun org-clock@remove-from-global-mode-string () - (setq global-mode-string - (delq 'org-mode-line-string global-mode-string))))) + ;; global-mode-string + ;; '((t jabber-activity-mode-string) + ;; (:eval (when (org-clocking-p) org-mode-line-string)) + ;; (display-time-mode display-time-string)) + ) + ;; (add-hook 'org-clock-in-hook (defun org-clock@remove-from-global-mode-string () + ;; (setq global-mode-string + ;; (delq 'org-mode-line-string global-mode-string)))) + ) (use-package org-agenda :bind (("C-c a" . org-agenda)) @@ -372,7 +420,7 @@ If LIST is non-nil, return the result as a list instead of a string." (800 1000 1200 1400 1600 1800 2000) " ┄┄┄┄┄ " "┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄") org-agenda-current-time-string "← now ───────────────" - org-agenda-include-diary t ; I use the org-diary features + org-agenda-include-diary nil ; I use the org-diary features org-agenda-todo-ignore-deadlines 'near org-agenda-todo-ignore-scheduled 'future org-agenda-include-deadlines t @@ -397,7 +445,8 @@ If LIST is non-nil, return the result as a list instead of a string." '("WAIT" "MCKENZIE" "RACHEL"))))) (stuck "" ((org-agenda-overriding-header "Waiting")))) ((org-agenda-files ',(list (progn (require 'chd) - (chd/ "inbox-chd.org")))))))) + (chd/ "inbox-chd.org")) + (sync/ "org/diary.org"))))))) ;; Speedup agenda generation ;; https://orgmode.org/manual/Speeding-Up-Your-Agendas.html ;; https://orgmode.org/worg/agenda-optimization.html @@ -409,7 +458,7 @@ If LIST is non-nil, return the result as a list instead of a string." (add-hook 'org-agenda-mode-hook #'truncate-lines-local-mode) (add-hook 'org-agenda-mode-hook #'hl-line-mode) (add-hook 'org-agenda-after-show-hook #'org-narrow-to-subtree) - (add-hook 'org-agenda-after-show-hook #'+org-hide-drawers-except-point) + ;; (add-hook 'org-agenda-after-show-hook #'+org-hide-drawers-except-point) (define-advice org-agenda-files (:filter-return (files) skip-regexp) "Filter some files from `org-agenda'." (when org-agenda-skip-file-regexp @@ -420,11 +469,17 @@ If LIST is non-nil, return the result as a list instead of a string." files))) files) (define-advice org-agenda (:around (orig &rest r) inhibit-hooks) - (let ((org-mode-hook nil)) + (dlet ((org-mode-hook nil)) + (apply orig r))) + (define-advice org-agenda-skip (:around (orig &rest r) fix-looking-at) + (dlet ((comment-start-skip "^\\s-*#\\(?: \\|$\\)")) (apply orig r))) + ;; (advice-remove 'org-agenda 'org-agenda@inhibit-hooks) (define-advice org-agenda-switch-to (:after (&rest _) do-hooks) (run-hooks 'org-mode-hook)) - (progress@around org-agenda-list "Building agenda")) + (progress@around org-agenda-list "Building agenda") + (with-eval-after-load 'org-agenda + (add-to-list 'org-agenda-files (sync/ "org/diary.org")))) (use-package org-capture :bind (("C-c c" . org-capture))) @@ -465,7 +520,7 @@ effect for exporting link types)." org-export-with-toc nil)) (use-package org-word-count - :load-path "~/src/emacs/org-word-count/" + :load-path "~/src/org-word-count.el/" :hook org-mode-hook) (use-package org-modern @@ -487,7 +542,7 @@ effect for exporting link types)." (use-package org-taskwise :after org - :load-path "~/src/emacs/org-taskwise/") + :load-path "~/src/org-taskwise.el/") (provide 'acdw-org) ;;; acdw-org.el ends here -- cgit 1.4.1-21-gabe81