From 62894ac7b8b85eb03766f66072b0be10ffb6898e Mon Sep 17 00:00:00 2001 From: Ag Ibragimov Date: Thu, 8 Sep 2022 23:57:31 -0500 Subject: [PATCH] adds drawers and fixes headlines --- README.org | 58 ++++++++++++++++++++++++++++++++++++-------- org-edit-indirect.el | 10 ++++---- 2 files changed, 53 insertions(+), 15 deletions(-) diff --git a/README.org b/README.org index 0fc14b1..9215bd7 100644 --- a/README.org +++ b/README.org @@ -1,21 +1,59 @@ -**** Extends ~org-edit-special~ so it can be used to edit (almost) anything in Org-mode, things like: ~quote~, ~verse~, ~comment~ blocks, etc. -***** Installation -The package has not been published yet, use your package manager (or whatever you usually do to get it in your config) +By default, Org-mode doesn't let you edit things in an indirect buffer except for source blocks. -Doom users: +This package extends ~org-edit-special~ so it can be used to edit (almost) any type of block in Org-mode, things like ~quote~, ~verse~, ~comment~ blocks, etc. -packages.el: +** Installation +It's on MELPA. Load it using your preferred way. + +*** Doom users: +~packages.el:~ #+begin_src emacs-lisp -(package! org-edit-indirect :recipe (:host github :repo "agzam/org-edit-indirect.el")) +(package! org-edit-indirect) #+end_src -config.el: +~config.el:~ #+begin_src emacs-lisp (use-package! org-edit-indirect :hook (org-mode . org-edit-indirect-mode)) #+end_src -***** Usage +** Usage +- Move the cursor to any source, verse, comment, quote block; drawer; or a paragraph, headline, property drawer, or a plain list +- ~~ (or whatever ~org-edit-special~ normally binds to) + +** Advanced usage +It's possible to set the major mode of the indirect buffer, based on the type of the block. I didn't want this package to be too intrusive, so I didn't implement this feature as part of the package. Here's an example of how that can be achieved: -- Move cursor to any source, verse, comment, quote block; or a paragraph, headline, property drawer, or a plain list -- ~~ (or whatever ~org-edit-special~ is normally bound to) +#+begin_src emacs-lisp +(defun edit-indirect-guess-mode-fn+ (parent-buffer beg _end) + "Guess the major mode for an edit-indirect buffer." + (let* ((type (with-current-buffer parent-buffer + (cond + ;; set markdown-mode for quote & verse blocks + ((and (eq major-mode 'org-mode) + (when-let ((s (save-mark-and-excursion + (goto-char (- beg 1)) + (thing-at-point 'symbol)))) + (string-match-p + "+begin_quote\\|+begin_verse" s))) + :quote) + ;; json-mode for results drawer blocks, + ;; src blocks like: + ;; #+begin_src sh :results drawer + ((and (eq major-mode 'org-mode) + (when-let ((s (save-mark-and-excursion + (goto-char (- beg 1)) + (backward-word) + (thing-at-point 'word)))) + (string-match-p "results" s))) + :results-drawer) + ;; fallback to org-mode for the rest + ((eq major-mode 'org-mode) :org-mode))))) + (cl-case type + (:quote (markdown-mode)) + (:results-drawer (json-mode)) + (:org-mode (org-mode)) + (t (normal-mode))))) + +(setq edit-indirect-guess-mode-function #'edit-indirect-guess-mode-fn+) +#+end_src diff --git a/org-edit-indirect.el b/org-edit-indirect.el index 1a0c355..43656f7 100644 --- a/org-edit-indirect.el +++ b/org-edit-indirect.el @@ -5,10 +5,10 @@ ;; Author: Ag Ibragimomv ;; Maintainer: Ag Ibragimomv ;; Created: May, 2021 -;; Version: 1.0.0 +;; Version: 1.1.0 ;; Keywords: convenience extensions outlines ;; Homepage: https://github.com/agzam/org-edit-indirect.el -;; Package-Requires: ((emacs "25.1") (edit-indirect "0.1.6") (org "9.0")) +;; Package-Requires: ((emacs "27") (edit-indirect "0.1.10") (org "9.0")) ;; ;; This file is not part of GNU Emacs @@ -47,11 +47,11 @@ (let* ((el-type (org-element-type (org-element-context org-element))) (parent (org-element-property :parent org-element)) (beg (pcase el-type - ((or `quote-block `verse-block `comment-block `plain-list) + ((or `quote-block `verse-block `comment-block `plain-list 'drawer 'paragraph 'headline) (org-element-property :contents-begin org-element)) (_ (org-element-property :begin (or parent org-element))))) (end (pcase el-type - ((or `quote-block `verse-block `comment-block `plain-list) + ((or `quote-block `verse-block `comment-block `plain-list 'drawer 'paragraph 'headline) (org-element-property :contents-end org-element)) (_ (org-element-property :end (or parent org-element)))))) (edit-indirect-region beg end :display))) @@ -69,7 +69,7 @@ ARG is passed to `org-edit-special'." (pcase (org-element-type context) ((or `quote-block `verse-block `comment-block `paragraph `headline `property-drawer - `plain-list `item) + `plain-list `item 'drawer 'link) (org-edit-indirect-generic-block element)) (_ (org-edit-special arg)))))