In Org one can use Org Source blocks to illustrate Org Syntax, as
follows:

#+begin_src org
* Test
** Test 2
#+end_src 

If one invokes `org-comment-dwim` on the source code, the text is
commented out, as follows:

#+begin_src org
# * Test
# ** COMMENT Test 2
#+end_src 

A second invocation adds the necessary escapes:

#+begin_src org
  ,* Test
  ,** COMMENT Test 2
#+end_src 

However, to re-invoke `org-comment-dwim` one has to then reselect the
text. Is this by design?

It would be helpful if selection remains as in this sample code, which
could be better implemented I am sure:

```
(defun org-comment-dwim-keep-selection (_arg)
  "Call the comment command while preserving selection.
Call `org-toggle-comment' if on a heading, otherwise call
`comment-dwim', within a source edit buffer if needed."
  (interactive "*P")
  (let ((region-active (region-active-p))
        (rbeg (when (region-active-p) (region-beginning)))
        (rend (when (region-active-p) (region-end))))
    ;; Call comment function
    (cond ((org-at-heading-p)
           (call-interactively #'org-toggle-comment))
          ((org-in-src-block-p)
           (org-babel-do-in-edit-buffer (call-interactively #'comment-dwim)))
          (t (call-interactively #'comment-dwim)))
    
    ;; Simply restore the exact original selection
    (when (and region-active rbeg rend)
      (set-mark rbeg)
      (goto-char rend)
      (setq deactivate-mark nil))))

(define-key org-mode-map (kbd "M-;") 'org-comment-dwim-keep-selection)
```

-- 
Raoul Comninos

Reply via email to