From f6e65c4010c8507e93dfc689feb4a65d4d2498b7 Mon Sep 17 00:00:00 2001 From: Henrik Lissner Date: Sat, 6 Jul 2024 19:58:27 -0400 Subject: [PATCH] feat(org): add +org/reformat-at-point command A DWIM command to reformat a src block, table, or paragraph at point. Ref: #7685 --- modules/lang/org/autoload/org.el | 18 ++++++++++++++++++ modules/lang/org/config.el | 2 +- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/modules/lang/org/autoload/org.el b/modules/lang/org/autoload/org.el index f1c033344..87085b434 100644 --- a/modules/lang/org/autoload/org.el +++ b/modules/lang/org/autoload/org.el @@ -334,6 +334,24 @@ see how ARG affects this command." (org-clock-in)) ((org-clock-in-last arg)))) +;;;###autoload +(defun +org/reformat-at-point () + "Reformat the element at point. + +If in an org src block, invokes `+format/org-block' if the ':editor format' + module is enabled. +If in an org table, realign the cells with `org-table-align'. +Otherwise, falls back to `org-fill-paragraph' to reflow paragraphs." + (interactive) + (let ((element (org-element-at-point))) + (cond ((org-in-src-block-p nil element) + (unless (modulep! :editor format) + (user-error ":editor format module is disabled, ignoring reformat...")) + (call-interactively #'+format/org-block)) + ((org-at-table-p) + (save-excursion (org-table-align))) + ((call-interactively #'org-fill-paragraph))))) + ;;; Folds ;;;###autoload diff --git a/modules/lang/org/config.el b/modules/lang/org/config.el index 84e87380f..d344d57b1 100644 --- a/modules/lang/org/config.el +++ b/modules/lang/org/config.el @@ -1222,7 +1222,7 @@ between the two." :m "[l" #'org-previous-link :m "]c" #'org-babel-next-src-block :m "[c" #'org-babel-previous-src-block - :n "gQ" #'org-fill-paragraph + :n "gQ" #'+org/reformat-at-point ;; sensible vim-esque folding keybinds :n "za" #'+org/toggle-fold :n "zA" #'org-shifttab