From 92249cffb0c899e51e2de0c5b3f252f186347bbf Mon Sep 17 00:00:00 2001 From: Dan Davison Date: Sun, 5 Sep 2010 19:49:11 -0400 Subject: [PATCH 1/3] 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. --- lisp/org-src.el | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/lisp/org-src.el b/lisp/org-src.el index 233058a54..1e955cfed 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) @@ -293,6 +299,12 @@ 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) + (setq deactivate-mark nil)) (org-goto-line (1+ (- line begline))) (org-move-to-column (if preserve-indentation col (max 0 (- col total-nindent)))) From ca4391f9b5b4b12b761ddd5cb9800a21897d0086 Mon Sep 17 00:00:00 2001 From: Dan Davison Date: Tue, 21 Sep 2010 15:02:22 +0100 Subject: [PATCH 2/3] Provide control over stripping of leading/trailing blank lines from code blocks * org-src.el (org-src-strip-leading-and-trailing-blank-lines): New variable allowing prevention of automatic stripping of leading and trailing blank lines when exiting edit buffer. (org-edit-src-exit): Respect value of `org-src-strip-leading-and-trailing-blank-lines' (org-src-native-tab-command-maybe): Bind `org-src-strip-leading-and-trailing-blank-lines' to nil during this function. --- lisp/org-src.el | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/lisp/org-src.el b/lisp/org-src.el index 1e955cfed..a368d80da 100644 --- a/lisp/org-src.el +++ b/lisp/org-src.el @@ -109,6 +109,10 @@ editing it with \\[org-edit-src-code]. Has no effect if :group 'org-edit-structure :type 'integer) +(defvar org-src-strip-leading-and-trailing-blank-lines nil + "If non-nil, blank lines are removed when exiting the code edit +buffer.") + (defcustom org-edit-src-persistent-message t "Non-nil means show persistent exit help message while editing src examples. The message is shown in the header-line, which will be created in the @@ -580,11 +584,12 @@ the language, a switch telling if the content should be in a single line." (delta 0) code line col indent) (when allow-write-back-p (unless preserve-indentation (untabify (point-min) (point-max))) - (save-excursion - (goto-char (point-min)) - (if (looking-at "[ \t\n]*\n") (replace-match "")) - (unless macro - (if (re-search-forward "\n[ \t\n]*\\'" nil t) (replace-match ""))))) + (if org-src-strip-leading-and-trailing-blank-lines + (save-excursion + (goto-char (point-min)) + (if (looking-at "[ \t\n]*\n") (replace-match "")) + (unless macro + (if (re-search-forward "\n[ \t\n]*\\'" nil t) (replace-match "")))))) (setq line (if (org-bound-and-true-p org-edit-src-force-single-line) 1 (org-current-line)) @@ -739,7 +744,8 @@ issued in the language major mode buffer.") Alter code block according to effect of TAB in the language major mode." (and org-src-tab-acts-natively - (org-babel-do-key-sequence-in-edit-buffer (kbd "TAB")))) + (let ((org-src-strip-leading-and-trailing-blank-lines nil)) + (org-babel-do-key-sequence-in-edit-buffer (kbd "TAB"))))) (add-hook 'org-tab-first-hook 'org-src-native-tab-command-maybe) From 1923c545020401c35aaa841d50cd36d96631434f Mon Sep 17 00:00:00 2001 From: Dan Davison Date: Tue, 21 Sep 2010 15:17:01 +0100 Subject: [PATCH 3/3] Add customize interface for `org-src-tab-acts-natively' * org-src.el (org-src-tab-acts-natively): Add customize interface --- lisp/org-src.el | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lisp/org-src.el b/lisp/org-src.el index a368d80da..6c4c464f1 100644 --- a/lisp/org-src.el +++ b/lisp/org-src.el @@ -735,9 +735,11 @@ Org-babel commands." (call-interactively (lookup-key org-babel-map key))))) -(defvar org-src-tab-acts-natively nil +(defcustom org-src-tab-acts-natively nil "If non-nil, the effect of TAB in a code block is as if it were -issued in the language major mode buffer.") +issued in the language major mode buffer." + :type 'boolean + :group 'org-babel) (defun org-src-native-tab-command-maybe () "Perform language-specific TAB action.