From 863eb82efd86ed779110144bbc83ed4805318779 Mon Sep 17 00:00:00 2001 From: Henrik Lissner Date: Wed, 5 Aug 2020 18:02:40 -0400 Subject: [PATCH] S-RET -> insert literal newline A convention on many text editors and applications is to make RET auto-indent new lines. That has already been done. Another convention is for S-RET to insert an unindented line; this commit adds this convention to Doom. Relevant to #3694 --- modules/config/default/+emacs-bindings.el | 4 ---- modules/config/default/+evil-bindings.el | 4 ---- modules/config/default/config.el | 7 +++++++ modules/lang/org/autoload/org.el | 9 +++++++++ modules/lang/org/config.el | 3 +++ 5 files changed, 19 insertions(+), 8 deletions(-) diff --git a/modules/config/default/+emacs-bindings.el b/modules/config/default/+emacs-bindings.el index 466d5b4a9..c21458002 100644 --- a/modules/config/default/+emacs-bindings.el +++ b/modules/config/default/+emacs-bindings.el @@ -425,10 +425,6 @@ "M-=" #'doom/increase-font-size "M--" #'doom/decrease-font-size - ;;; newlines - [remap newline] #'newline-and-indent - "C-j" #'+default/newline - ;;; search (:when (featurep! :completion ivy) "C-S-s" #'swiper diff --git a/modules/config/default/+evil-bindings.el b/modules/config/default/+evil-bindings.el index c460f8574..59270099b 100644 --- a/modules/config/default/+evil-bindings.el +++ b/modules/config/default/+evil-bindings.el @@ -50,10 +50,6 @@ (not (memq (char-after) (list ?\( ?\[ ?\{ ?\} ?\] ?\)))))) #'yas-insert-snippet) - ;; Smarter newlines - :i [remap newline] #'newline-and-indent ; auto-indent on newline - :i "C-j" #'+default/newline ; default behavior - (:after help :map help-mode-map :n "o" #'link-hint-open-link) (:after helpful :map helpful-mode-map diff --git a/modules/config/default/config.el b/modules/config/default/config.el index ccf2c6a95..d55bbebaf 100644 --- a/modules/config/default/config.el +++ b/modules/config/default/config.el @@ -427,6 +427,13 @@ Continues comments if executed from a commented line. Consults ;; which ctrl+RET will add a new "item" below the current one and ;; cmd+RET (Mac) / meta+RET (elsewhere) will add a new, blank line below ;; the current one. + ;; auto-indent on newline by default + :gi [remap newline] #'newline-and-indent + ;; insert literal newline + :gi "S-RET" #'+default/newline + :gi [S-return] #'+default/newline + :gi "C-j" #'+default/newline + ;; add new item below :gn [C-return] #'+default/newline-below :gn [C-S-return] #'+default/newline-above (:when IS-MAC diff --git a/modules/lang/org/autoload/org.el b/modules/lang/org/autoload/org.el index f6f215d22..8c4bf1cb9 100644 --- a/modules/lang/org/autoload/org.el +++ b/modules/lang/org/autoload/org.el @@ -271,6 +271,15 @@ If on a: (org-element-property :begin context) (org-element-property :end context))))))) +;;;###autoload +(defun +org/shift-return (&optional arg) + "Insert a literal newline, or dwim in tables. +Executes `org-table-copy-down' if in table." + (interactive "p") + (if (org-at-table-p) + (org-table-copy-down arg) + (org-return nil arg))) + ;; I use these instead of `org-insert-item' or `org-insert-heading' because they ;; impose bizarre whitespace rules depending on cursor location and many diff --git a/modules/lang/org/config.el b/modules/lang/org/config.el index 1f87e965a..51fc18506 100644 --- a/modules/lang/org/config.el +++ b/modules/lang/org/config.el @@ -643,6 +643,7 @@ between the two." "C-c C-S-l" #'+org/remove-link "C-c C-i" #'org-toggle-inline-images ;; textmate-esque newline insertion + "S-RET" #'+org/shift-return "C-RET" #'+org/insert-item-below "C-S-RET" #'+org/insert-item-above "C-M-RET" #'org-insert-subheading @@ -999,6 +1000,8 @@ compelling reason, so..." ;; more intuitive RET keybinds :i [return] (cmd! (org-return t)) :i "RET" (cmd! (org-return t)) + :i [S-return] #'+org/shift-return + :i "S-RET" #'+org/shift-return :n [return] #'+org/dwim-at-point :n "RET" #'+org/dwim-at-point ;; more vim-esque org motion keys (not covered by evil-org-mode)