emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
* [PATCH] Allow code edit buffer to inherit active region
@ 2010-09-04 17:56 Dan Davison
  2010-09-14 13:33 ` Dan Davison
  0 siblings, 1 reply; 7+ messages in thread
From: Dan Davison @ 2010-09-04 17:56 UTC (permalink / raw)
  To: emacs org-mode mailing list

If we allow the current region to be inherited by the code edit buffer
(patch below), then language major mode commands that operate on the
region can be called remotely from the org buffer. For example

C-c C-v C-x M-;       comment region according to language
C-c C-v C-x C-M-\     indent region according to language

Users can make these more convenient, e.g.

(defun my/org-comment-dwim (&optional arg)
    (interactive "P")
    (or (org-babel-do-key-sequence-in-edit-buffer "\M-;")
        (comment-dwim arg)))

(define-key org-mode-map "\M-;" 'my/org-comment-dwim)

Dan

Proposed patch:
~~~~~~~~~~~~~~~

commit 6e14f016cdfe92357092461058def5d4073541e2
Author: Dan Davison <davison@stats.ox.ac.uk>
Date:   Sat Sep 4 13:43:56 2010 -0400

    Transmit active region from Org buffer to code edit buffer
    
    	* org-src.el (org-edit-src-code): If mark was inside code
    	block then code edit buffer inherits mark with active region.

diff --git a/lisp/org-src.el b/lisp/org-src.el
index d1948cc..d0a9729 100644
--- a/lisp/org-src.el
+++ b/lisp/org-src.el
@@ -209,6 +209,7 @@ buffer."
     (setq org-edit-src-saved-temp-window-config (current-window-configuration)))
   (let ((line (org-current-line))
 	(col (current-column))
+	(mark (and (use-region-p) (mark)))
 	(case-fold-search t)
 	(info (org-edit-src-find-region-and-lang))
 	(babel-info (org-babel-get-src-block-info))
@@ -217,7 +218,8 @@ buffer."
 	(end (make-marker))
 	(preserve-indentation org-src-preserve-indentation)
 	(allow-write-back-p (null code))
-	block-nindent total-nindent ovl lang lang-f single lfmt begline buffer msg)
+	block-nindent total-nindent ovl lang lang-f single lfmt buffer msg
+	begline markline markcol)
     (if (not info)
 	nil
       (setq beg (move-marker beg (nth 0 info))
@@ -235,6 +237,10 @@ buffer."
 	    block-nindent (nth 5 info)
 	    lang-f (intern (concat lang "-mode"))
 	    begline (save-excursion (goto-char beg) (org-current-line)))
+      (if (and mark (>= mark beg) (<= mark end))
+	  (save-excursion (goto-char mark)
+			  (setq markline (org-current-line)
+				markcol (current-column))))
       (if (equal lang-f 'table.el-mode)
 	  (setq lang-f (lambda ()
 			 (text-mode)
@@ -290,6 +296,11 @@ buffer."
 	  (while (re-search-forward "^," nil t)
 	    (if (eq (org-current-line) line) (setq total-nindent (1+ total-nindent)))
 	    (replace-match "")))
+	(when markline
+	  (org-goto-line (1+ (- markline begline)))
+	  (org-move-to-column
+	   (if preserve-indentation markcol (max 0 (- markcol total-nindent))))
+	  (push-mark (point) 'no-message t))
 	(org-goto-line (1+ (- line begline)))
 	(org-move-to-column
 	 (if preserve-indentation col (max 0 (- col total-nindent))))

^ permalink raw reply related	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2010-09-30 15:19 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-09-04 17:56 [PATCH] Allow code edit buffer to inherit active region Dan Davison
2010-09-14 13:33 ` Dan Davison
2010-09-21 12:34   ` Carsten Dominik
2010-09-21 14:25     ` Dan Davison
2010-09-30  8:02       ` Sébastien Vauban
2010-09-30  9:53         ` Dan Davison
2010-09-30 15:19           ` Sébastien Vauban

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).