diff --git a/modules/lang/org/autoload/org.el b/modules/lang/org/autoload/org.el index 1a945fcd3..0c890b61c 100644 --- a/modules/lang/org/autoload/org.el +++ b/modules/lang/org/autoload/org.el @@ -307,9 +307,16 @@ wrong places)." (defun +org|realign-table-maybe () "Auto-align table under cursor and re-calculate formulas." (when (and (org-at-table-p) org-table-may-need-update) - (quiet! - (org-table-recalculate) - (if org-table-may-need-update (org-table-align))))) + (save-excursion + (quiet! + (org-table-recalculate) + (if org-table-may-need-update (org-table-align)))))) + +;;;###autoload +(defun +org*realign-table-maybe (&rest _) + "Auto-align table under cursor and re-calculate formulas." + (when (eq major-mode 'org-mode) + (+org|realign-table-maybe))) ;;;###autoload (defun +org|update-cookies () diff --git a/modules/lang/org/config.el b/modules/lang/org/config.el index ef19c674e..7c7daed71 100644 --- a/modules/lang/org/config.el +++ b/modules/lang/org/config.el @@ -99,9 +99,11 @@ unfold to point on startup." (sp-local-pair "=" nil :unless '(:add sp-point-before-word-p))))) (defun +org|enable-auto-reformat-tables () - "Realign tables exiting insert mode (`evil-mode')." + "Realign tables & update formulas when exiting insert mode (`evil-mode')." (when (featurep 'evil) - (add-hook 'evil-insert-state-exit-hook #'+org|realign-table-maybe nil t))) + (add-hook 'evil-insert-state-exit-hook #'+org|realign-table-maybe nil t) + (add-hook 'evil-replace-state-exit-hook #'+org|realign-table-maybe nil t) + (advice-add #'evil-replace :after #'+org*realign-table-maybe))) (defun +org|enable-auto-update-cookies () "Update statistics cookies when saving or exiting insert mode (`evil-mode')."