diff --git a/modules/lang/org/autoload/org.el b/modules/lang/org/autoload/org.el index c74c10821..214483465 100644 --- a/modules/lang/org/autoload/org.el +++ b/modules/lang/org/autoload/org.el @@ -361,8 +361,8 @@ another level of headings on each invocation." ;;;###autoload (defun +org|indent-maybe () - "Indent the current item (header or item), if possible. Made for -`org-tab-first-hook' in evil-mode." + "Indent the current item (header or item), if possible. +Made for `org-tab-first-hook' in evil-mode." (interactive) (cond ((or (not (bound-and-true-p evil-mode)) (not (eq evil-state 'insert))) diff --git a/modules/lang/org/autoload/tables.el b/modules/lang/org/autoload/tables.el index be0067e50..5e150917c 100644 --- a/modules/lang/org/autoload/tables.el +++ b/modules/lang/org/autoload/tables.el @@ -1,12 +1,7 @@ ;;; org/org/autoload/tables.el -*- lexical-binding: t; -*- -;;;###autoload -(defun +org/table-next-row () - "Go to the next row (same column) in the current table." - (interactive) - (if (org-at-table-p) - (org-table-next-row) - (org-down-element))) +;; +;;; Row/Column traversal ;;;###autoload (defun +org/table-previous-row () @@ -14,41 +9,37 @@ re-align the table if necessary. (Necessary because org-mode has a `org-table-next-row', but not `org-table-previous-row')" (interactive) - (if (org-at-table-p) - (progn - (org-table-maybe-eval-formula) - (org-table-maybe-recalculate-line) - (if (and org-table-automatic-realign - org-table-may-need-update) - (org-table-align)) - (let ((col (org-table-current-column))) - (beginning-of-line 0) - (when (or (not (org-at-table-p)) (org-at-table-hline-p)) - (beginning-of-line)) - (org-table-goto-column col) - (skip-chars-backward "^|\n\r") - (when (org-looking-at-p " ") (forward-char)))) - (org-up-element))) + (org-table-maybe-eval-formula) + (org-table-maybe-recalculate-line) + (if (and org-table-automatic-realign + org-table-may-need-update) + (org-table-align)) + (let ((col (org-table-current-column))) + (beginning-of-line 0) + (when (or (not (org-at-table-p)) (org-at-table-hline-p)) + (beginning-of-line)) + (org-table-goto-column col) + (skip-chars-backward "^|\n\r") + (when (org-looking-at-p " ") + (forward-char)))) + + +;; +;;; Row/Column insertion ;;;###autoload -(defun +org/table-next-field () +(defun +org/table-insert-column-left () + "Insert a new column right of the current column." (interactive) - (if (org-at-table-p) (org-table-next-field) (org-end-of-line))) + (org-table-insert-column) + (org-table-move-column-left)) ;;;###autoload -(defun +org/table-previous-field () +(defun +org/table-insert-row-below () + "Insert a new row below the current row." (interactive) - (if (org-at-table-p) (org-table-previous-field) (org-beginning-of-line))) + (org-table-insert-row 'below)) ;;;###autoload -(defalias '+org/table-append-field-or-shift-right #'org-shiftmetaright) - -;;;###autoload -(defun +org/table-prepend-field-or-shift-left () - "TODO" - (interactive) - (if (org-at-table-p) - (progn - (org-shiftmetaright) - (org-table-move-column-left)) - (org-shiftmetaleft))) +(defalias '+org/table-insert-row-above #'org-table-insert-row + "Insert a new row above the current row.") diff --git a/modules/lang/org/config.el b/modules/lang/org/config.el index a8dc41bf3..b2ddff45c 100644 --- a/modules/lang/org/config.el +++ b/modules/lang/org/config.el @@ -341,7 +341,54 @@ between the two." "C-c C-S-l" #'+org/remove-link "C-c C-i" #'org-toggle-inline-images [remap doom/backward-to-bol-or-indent] #'org-beginning-of-line - [remap doom/forward-to-last-non-comment-or-eol] #'org-end-of-line)) + [remap doom/forward-to-last-non-comment-or-eol] #'org-end-of-line + + :localleader + "d" #'org-deadline + "b" #'org-switchb + "f" #'org-footnote-new + "F" #'org-footnote-goto-definition + "t" #'org-todo + "T" #'org-todo-list + "l" #'org-insert-link + "L" #'org-store-link + "r" #'org-refile + "'" #'org-edit-special + (:prefix ("c" . "clock") + "c" #'org-clock-in + "C" #'org-clock-out + "g" #'org-clock-goto + "G" (λ! (org-clock-goto 'select)) + "x" #'org-clock-cancel) + (:prefix ("e" . "export") + :desc "to markdown" "m" #'org-md-export-to-markdown + :desc "to markdown & open" "M" #'org-md-export-as-markdown + :desc "to reveal.js" "r" #'org-reveal-export-to-html + :desc "to reveal.js & open" "R" #'org-reveal-export-to-html-and-browse + (:prefix ("b" . "from beamer") + :desc "to latex" "l" #'org-beamer-export-to-latex + :desc "to latex & open" "L" #'org-beamer-export-as-latex + :desc "as pdf" "p" #'org-beamer-export-to-pdf)) + (:prefix ("s" . "tables") + "a" #'org-table-align + "e" #'org-table-edit-field + "h" #'org-table-field-info + (:prefix ("i" . "insert") + "-" #'org-table-insert-hline + "h" #'+org/table-insert-column-left + "j" #'+org/table-insert-row-below + "k" #'+org/table-insert-row-above + "l" #'+org/table-insert-column-right) + (:prefix ("m" . "move") + "h" #'org-table-move-column-left + "j" #'org-table-move-row-down + "k" #'org-table-move-row-up + "l" #'org-table-move-column-right) + (:prefix ("f" . "formula") + "c" #'org-table-create + "r" #'org-table-recalculate + "e" #'org-table-edit-formulas + "=" #'org-table-eval-formulas)))) (defun +org|setup-evil-keybinds (&rest args) @@ -377,15 +424,32 @@ between the two." ;; dedent with shift-tab in insert mode :i [backtab] #'+org/dedent ;; navigate table cells (from insert-mode) - :i "C-l" #'+org/table-next-field - :i "C-h" #'+org/table-previous-field - :i "C-k" #'+org/table-previous-row - :i "C-j" #'+org/table-next-row - ;; expand tables or move fields - :ni "C-S-l" #'+org/table-append-field-or-shift-right - :ni "C-S-h" #'+org/table-prepend-field-or-shift-left - :ni "C-S-k" #'org-metaup - :ni "C-S-j" #'org-metadown + :i "C-l" (general-predicate-dispatch 'org-end-of-line + (org-at-table-p) 'org-table-next-field) + :i "C-h" (general-predicate-dispatch 'org-beginning-of-line + (org-at-table-p) 'org-table-previous-field) + :i "C-k" (general-predicate-dispatch 'org-up-element + (org-at-table-p) '+org/table-previous-row) + :i "C-j" (general-predicate-dispatch 'org-down-element + (org-at-table-p) 'org-table-next-row) + ;; expand tables (insert columns/rows) + :ni "C-S-l" (general-predicate-dispatch 'org-shiftmetaright + (org-at-table-p) 'org-table-insert-column) + :ni "C-S-h" (general-predicate-dispatch 'org-shiftmetaleft + (org-at-table-p) '+org/table-insert-column-left) + :ni "C-S-k" (general-predicate-dispatch 'org-shiftmetaup + (org-at-table-p) '+org/table-insert-row-above) + :ni "C-S-j" (general-predicate-dispatch 'org-shiftmetadown + (org-at-table-p) '+org/table-insert-row-below) + ;; shifting table rows/columns + :ni "C-M-S-l" (general-predicate-dispatch 'org-metaright + (org-at-table-p) 'org-table-move-column-right) + :ni "C-M-S-h" (general-predicate-dispatch 'org-metaleft + (org-at-table-p) 'org-table-move-column-left) + :ni "C-M-S-k" (general-predicate-dispatch 'org-metaup + (org-at-table-p) 'org-table-move-row-up) + :ni "C-M-S-j" (general-predicate-dispatch 'org-metadown + (org-at-table-p) 'org-table-move-row-down) ;; more intuitive RET keybinds :i [return] #'org-return-indent :i "RET" #'org-return-indent @@ -413,6 +477,7 @@ between the two." :n "zO" #'outline-show-subtree :n "zr" #'+org/show-next-fold-level :n "zR" #'outline-show-all + :n "zi" #'org-toggle-inline-images :map org-read-date-minibuffer-local-map "C-h" (λ! (org-eval-in-calendar '(calendar-backward-day 1))) @@ -422,30 +487,7 @@ between the two." "C-S-h" (λ! (org-eval-in-calendar '(calendar-backward-month 1))) "C-S-l" (λ! (org-eval-in-calendar '(calendar-forward-month 1))) "C-S-k" (λ! (org-eval-in-calendar '(calendar-backward-year 1))) - "C-S-j" (λ! (org-eval-in-calendar '(calendar-forward-year 1))) - - :localleader - :map org-mode-map - "d" #'org-deadline - "b" #'org-switchb - "t" #'org-todo - "T" #'org-todo-list - "l" #'org-store-link - (:prefix ("c" . "clock") - "c" #'org-clock-in - "C" #'org-clock-out - "g" #'org-clock-goto - "G" (λ! (org-clock-goto 'select)) - "x" #'org-clock-cancel) - (:prefix ("e" . "export") - :desc "to markdown" "m" #'org-md-export-to-markdown - :desc "to markdown & open" "M" #'org-md-export-as-markdown - :desc "to reveal.js" "r" #'org-reveal-export-to-html - :desc "to reveal.js & open" "R" #'org-reveal-export-to-html-and-browse - (:prefix ("b" . "from beamer") - :desc "to latex" "l" #'org-beamer-export-to-latex - :desc "to latex & open" "L" #'org-beamer-export-as-latex - :desc "as pdf" "p" #'org-beamer-export-to-pdf)))) + "C-S-j" (λ! (org-eval-in-calendar '(calendar-forward-year 1))))) (defun +org|setup-hacks ()