From 801d6f133a48e43aedce1159297c621f2cb77a2a Mon Sep 17 00:00:00 2001 From: Jim Myhrberg Date: Thu, 7 May 2020 19:11:05 +0100 Subject: [PATCH] feat(navigation): Improve narrowing with recursive-narrow package Additionally allow `recursive-narrow-or-widen-dwin` to also trigger `org-edit-src-code` within org buffers. This technically does not use narrowing, but it does "focus" on the source code block for editing, so it at least in spirit embodies the intent of narrowing. This behavior was inspired by: https://endlessparentheses.com/emacs-narrow-or-widen-dwim.html --- core/siren-core-modules.el | 1 + modules/navigation/siren-recursive-narrow.el | 24 +++++++++++++++++++ modules/org-mode/siren-org-mode.el | 25 ++++++++++++-------- 3 files changed, 40 insertions(+), 10 deletions(-) create mode 100644 modules/navigation/siren-recursive-narrow.el diff --git a/core/siren-core-modules.el b/core/siren-core-modules.el index aa1a30d..74f11f5 100644 --- a/core/siren-core-modules.el +++ b/core/siren-core-modules.el @@ -62,6 +62,7 @@ (require 'siren-helm-ag) (require 'siren-helm-open-github) (require 'siren-helm-swoop) +(require 'siren-recursive-narrow) (require 'siren-scroll-half-screen) ;; Project management diff --git a/modules/navigation/siren-recursive-narrow.el b/modules/navigation/siren-recursive-narrow.el new file mode 100644 index 0000000..1a41279 --- /dev/null +++ b/modules/navigation/siren-recursive-narrow.el @@ -0,0 +1,24 @@ +;;; siren-recursive-narrow.el --- jimeh's Emacs Siren: recursive-narrow configuration. + +;;; Commentary: + +;; Basic configuration for recursive-narrow. + +;;; Code: + +(use-package recursive-narrow + :bind + ("C-x C-n" . recursive-narrow-or-widen-dwim) + ("C-x n w" . recursive-widen) + ("C-x n n" . recursive-narrow-or-widen-dwim) + + :config + (add-hook 'recursive-narrow-dwim-functions + 'siren-recursive-narrow-org-edit-src-code) + + :init + (defun siren-recursive-narrow-org-edit-src-code() + (ignore-errors (org-edit-src-code) t))) + +(provide 'siren-recursive-narrow) +;;; siren-recursive-narrow.el ends here diff --git a/modules/org-mode/siren-org-mode.el b/modules/org-mode/siren-org-mode.el index ab91ede..7820e07 100644 --- a/modules/org-mode/siren-org-mode.el +++ b/modules/org-mode/siren-org-mode.el @@ -13,16 +13,21 @@ (require 'siren-smartparens) (use-package org - :bind (:map org-mode-map - ("C-j" . org-return-indent) - ("RET" . org-return-indent) - ("M-{" . org-promote-subtree) - ("M-}" . org-demote-subtree) - ("M-P" . org-metaup) - ("M-N" . org-metadown) - ("C-M-n" . outline-next-visible-heading) - ("C-M-p" . outline-previous-visible-heading)) - :hook (org-mode . siren-org-mode-setup) + :bind + (:map org-mode-map + ("C-j" . org-return-indent) + ("RET" . org-return-indent) + ("M-{" . org-promote-subtree) + ("M-}" . org-demote-subtree) + ("M-P" . org-metaup) + ("M-N" . org-metadown) + ("C-M-n" . outline-next-visible-heading) + ("C-M-p" . outline-previous-visible-heading)) + (:map org-src-mode-map + ("C-c C-c" . org-edit-src-exit)) + + :hook + (org-mode . siren-org-mode-setup) :custom (org-blank-before-new-entry '((heading . auto) (plain-list-item . nil)))