Hi List, I often missed the following command for wrapping existing content into src-blocks in the past, besides knowing about `org-babel-demarcate-block' and easy template insertion. Would it make sense to add it to Org-mode?
I made it cover several use cases: - Wrap sexp at point - perfect when on first paren of a nested list, or when a string should be wrapped in a programming-mode, or a word in a text-mode. - Wrap region between point and +/- N lines forward/backward (very fast because no point movement is involved). - Wrap active region. Usage: 1. wrap active region or (if none) sexp-at-point in emacs-lisp src-block ,---- | M-x org-wrap-in-src-block `---- 2. wrap active region or (if none) sexp-at-point in src-block, prompt user for Org-Babel language ,---- | C-u M-x org-wrap-in-src-block `---- 3. prompt user for Org-Babel language and number of lines to wrap (forward or backward) ,---- | C-u C-u M-x org-wrap-in-src-block `---- #+begin_src emacs-lisp (defun org-wrap-in-src-block (&optional lang lines) "Wrap sexp-at-point or region in src-block. Use Org-Babel LANGuage for the src-block if given, Emacs-Lisp otherwise. A region instead of the sexp-at-point is wrapped if either - optional argument LINES is an (positive or negative) integer - or the region is active In the first case the region is determined by moving +/- LINES forward/backward from point using `forward-line', in the second case the active region is used. When called with prefix argument 'C-u', prompt the user for the Org-Babel language to use. When called with two prefix arguments 'C-u C-u', prompt the user for both the Org-Babel language to use and the number of lines to be wrapped." (interactive (cond ((equal current-prefix-arg nil) nil) ((equal current-prefix-arg '(4)) (list (ido-completing-read "Org-Babel language: " (mapcar (lambda (--lang) (symbol-name (car --lang))) org-babel-load-languages) nil nil nil nil "emacs-lisp"))) ((equal current-prefix-arg '(16)) (list (ido-completing-read "Org-Babel language: " (mapcar (lambda (--lang) (symbol-name (car --lang))) org-babel-load-languages) nil nil nil nil "emacs-lisp") (read-number "Number of lines to wrap: " 1))))) (let* ((language (or lang "emacs-lisp")) (beg (or (and (not lines) (region-active-p) (region-beginning)) (point))) (marker (save-excursion (goto-char beg) (point-marker))) (bol (save-excursion (goto-char beg) (bolp))) (end (cond (lines (save-excursion (forward-line lines) (point))) ((region-active-p)(region-end)) (t (save-excursion (forward-sexp) (point))))) (cut-strg (buffer-substring beg end))) (delete-region beg end) (goto-char (marker-position marker)) (insert (format "%s#+begin_src %s\n%s%s#+end_src\n" (if (or (and lines (< lines 0)) bol) "" "\n") language cut-strg (if lines "" "\n"))) (set-marker marker nil))) #+end_src -- cheers, Thorsten