Support interactive editing of comment blocks

* lisp/org-src.el (org-edit-comment-block): New command to edit
comment block elements.  The command auto-escapes Org markup inside.
(org-src--contents-area):
* lisp/org.el (org-insert-structure-template):
(org-edit-special): Support comment blocks.
* etc/ORG-NEWS (Interactive commands now support escaping text inside
comment blocks):
(New command ~org-edit-comment-block~ to edit comment block at point):
Document the new features.

See https://orgmode.org/list/87y1wc3ruw.fsf@mat.ucm.es
This commit is contained in:
Ihor Radchenko 2022-07-30 13:24:10 +08:00
parent 9cc60dee48
commit a303a794f8
No known key found for this signature in database
GPG Key ID: 6470762A7DA11D8B
3 changed files with 46 additions and 3 deletions

View File

@ -141,6 +141,14 @@ discouraged when working with Org files.
** New features
*** Interactive commands now support escaping text inside comment blocks
~org-edit-special~ and ~org-insert-structure-template~ now handle
comment blocks.
See [[*New command ~org-edit-comment-block~ to edit comment block at
point]].
*** New customization option =org-property-separators=
A new alist variable to control how properties are combined.
@ -301,6 +309,16 @@ inside entry. This was the default previously.
Now, ~org-fold-show-entry~ does not fold drawers by default.
*** New command ~org-edit-comment-block~ to edit comment block at point
As the contents of comments blocks is not parsed as Org markup, the
headlines and keywords inside should be escaped, similar to src
blocks, example blocks, and export blocks. This in inconvenient to do
manually and ~org-edit-special~ is usually advised to edit text in
such kind of blocks.
Now, comment block editing is also supported via this new function.
*** New function ~org-element-cache-map~ for quick mapping across Org elements
When element cache is enabled, the new function provides the best
@ -314,7 +332,6 @@ to ~org-element--cache-map-statistics~ and
~org-element--cache-map-statistics-threshold~.
~org-scan-tags~ and tag views in agenda utilise the new function.
*** New function ~org-element-at-point-no-context~
This function is like ~org-element-at-point~, but it does not try to

View File

@ -384,7 +384,7 @@ where BEG and END are buffer positions and CONTENTS is a string."
(let ((beg (org-element-property :contents-begin datum))
(end (org-element-property :contents-end datum)))
(list beg end (buffer-substring-no-properties beg end))))
((memq type '(example-block export-block src-block))
((memq type '(example-block export-block src-block comment-block))
(list (progn (goto-char (org-element-property :post-affiliated datum))
(line-beginning-position 2))
(progn (goto-char (org-element-property :end datum))
@ -1161,6 +1161,29 @@ Throw an error when not at an export block."
(lambda () (org-escape-code-in-region (point-min) (point-max)))))
t))
(defun org-edit-comment-block ()
"Edit comment block at point.
\\<org-src-mode-map>
A new buffer is created and the block is copied into it, and the
buffer is switched into Org mode.
When done, exit with `\\[org-edit-src-exit]'. The edited text \
will then replace the area in the Org mode buffer.
Throw an error when not at a comment block."
(interactive)
(let ((element (org-element-at-point)))
(unless (and (eq (org-element-type element) 'comment-block)
(org-src--on-datum-p element))
(user-error "Not in a comment block"))
(org-src--edit-element
element
(org-src--construct-edit-buffer-name (buffer-name) "org")
'org-mode
(lambda () (org-escape-code-in-region (point-min) (point-max)))
(org-unescape-code-in-string (org-element-property :value element)))
t))
(defun org-edit-src-code (&optional code edit-buffer-name)
"Edit the source or example block at point.
\\<org-src-mode-map>

View File

@ -8873,7 +8873,8 @@ When foo is written as FOO, upcase the #+BEGIN/END as well."
(region-end (and region? (copy-marker (region-end))))
(extended? (string-match-p "\\`\\(src\\|export\\)\\'" type))
(verbatim? (string-match-p
(concat "\\`" (regexp-opt '("example" "export" "src")))
(concat "\\`" (regexp-opt '("example" "export"
"src" "comment")))
type))
(upcase? (string= (car (split-string type))
(upcase (car (split-string type))))))
@ -16998,6 +16999,7 @@ When at a table, call the formula editor with `org-table-edit-formulas'.
When in a source code block, call `org-edit-src-code'.
When in a fixed-width region, call `org-edit-fixed-width-region'.
When in an export block, call `org-edit-export-block'.
When in a comment block, call `org-edit-comment-block'.
When in a LaTeX environment, call `org-edit-latex-environment'.
When at an INCLUDE, SETUPFILE or BIBLIOGRAPHY keyword, visit the included file.
When at a footnote reference, call `org-edit-footnote-reference'.
@ -17044,6 +17046,7 @@ Otherwise, return a user error."
(`table-row (call-interactively 'org-table-edit-formulas))
(`example-block (org-edit-src-code))
(`export-block (org-edit-export-block))
(`comment-block (org-edit-comment-block))
(`fixed-width (org-edit-fixed-width-region))
(`latex-environment (org-edit-latex-environment))
(`planning