|
@@ -6389,7 +6389,7 @@ the edited version."
|
|
|
(org-mode-p (eq major-mode 'org-mode))
|
|
|
(beg (make-marker))
|
|
|
(end (make-marker))
|
|
|
- lang lang-f single lfmt code begline)
|
|
|
+ lang lang-f single lfmt code begline buffer)
|
|
|
(if (not info)
|
|
|
nil
|
|
|
(setq beg (move-marker beg (nth 0 info))
|
|
@@ -6403,31 +6403,48 @@ the edited version."
|
|
|
(unless (functionp lang-f)
|
|
|
(error "No such language mode: %s" lang-f))
|
|
|
(goto-line line)
|
|
|
- (if (get-buffer "*Org Edit Src Example*")
|
|
|
- (kill-buffer "*Org Edit Src Example*"))
|
|
|
- (switch-to-buffer (get-buffer-create "*Org Edit Src Example*"))
|
|
|
- (insert code)
|
|
|
- (remove-text-properties (point-min) (point-max)
|
|
|
- '(display nil invisible nil intangible nil))
|
|
|
- (let ((org-inhibit-startup t))
|
|
|
- (funcall lang-f))
|
|
|
- (set (make-local-variable 'org-edit-src-force-single-line) single)
|
|
|
- (set (make-local-variable 'org-edit-src-from-org-mode) org-mode-p)
|
|
|
- (when lfmt
|
|
|
- (set (make-local-variable 'org-coderef-label-format) lfmt))
|
|
|
- (when org-mode-p
|
|
|
- (goto-char (point-min))
|
|
|
- (while (re-search-forward "^," nil t)
|
|
|
- (replace-match "")))
|
|
|
- (goto-line (1+ (- line begline)))
|
|
|
- (org-exit-edit-mode)
|
|
|
- (org-set-local 'org-edit-src-beg-marker beg)
|
|
|
- (org-set-local 'org-edit-src-end-marker end)
|
|
|
- (and org-edit-src-persistent-message
|
|
|
- (org-set-local 'header-line-format msg))
|
|
|
+ (if (and (setq buffer (org-edit-src-find-buffer beg end))
|
|
|
+ (y-or-n-p "Return to existing edit buffer? [n] will revert changes: "))
|
|
|
+ (switch-to-buffer buffer)
|
|
|
+ (and buffer (kill-buffer buffer))
|
|
|
+ (switch-to-buffer (generate-new-buffer "*Org Edit Src Example*"))
|
|
|
+ (insert code)
|
|
|
+ (remove-text-properties (point-min) (point-max)
|
|
|
+ '(display nil invisible nil intangible nil))
|
|
|
+ (let ((org-inhibit-startup t))
|
|
|
+ (funcall lang-f))
|
|
|
+ (set (make-local-variable 'org-edit-src-force-single-line) single)
|
|
|
+ (set (make-local-variable 'org-edit-src-from-org-mode) org-mode-p)
|
|
|
+ (when lfmt
|
|
|
+ (set (make-local-variable 'org-coderef-label-format) lfmt))
|
|
|
+ (when org-mode-p
|
|
|
+ (goto-char (point-min))
|
|
|
+ (while (re-search-forward "^," nil t)
|
|
|
+ (replace-match "")))
|
|
|
+ (goto-line (1+ (- line begline)))
|
|
|
+ (org-exit-edit-mode)
|
|
|
+ (org-set-local 'org-edit-src-beg-marker beg)
|
|
|
+ (org-set-local 'org-edit-src-end-marker end)
|
|
|
+ (and org-edit-src-persistent-message
|
|
|
+ (org-set-local 'header-line-format msg)))
|
|
|
(message "%s" msg)
|
|
|
t)))
|
|
|
|
|
|
+(defun org-edit-src-find-buffer (beg end)
|
|
|
+ "Find a source editing buffer that is already editing the region BEG to END."
|
|
|
+ (catch 'exit
|
|
|
+ (mapc
|
|
|
+ (lambda (b)
|
|
|
+ (with-current-buffer b
|
|
|
+ (if (and (string-match "\\`*Org Edit " (buffer-name))
|
|
|
+ (local-variable-p 'org-edit-src-beg-marker (current-buffer))
|
|
|
+ (local-variable-p 'org-edit-src-end-marker (current-buffer))
|
|
|
+ (equal beg org-edit-src-beg-marker)
|
|
|
+ (equal end org-edit-src-end-marker))
|
|
|
+ (throw 'exit (current-buffer)))))
|
|
|
+ (buffer-list))
|
|
|
+ nil))
|
|
|
+
|
|
|
(defun org-edit-fixed-width-region ()
|
|
|
"Edit the fixed-width ascii drawing at point.
|
|
|
This must be a region where each line starts with a colon followed by
|
|
@@ -6444,7 +6461,7 @@ the fragment in the Org-mode buffer."
|
|
|
(org-mode-p (eq major-mode 'org-mode))
|
|
|
(beg (make-marker))
|
|
|
(end (make-marker))
|
|
|
- beg1 end1 code begline)
|
|
|
+ beg1 end1 code begline buffer)
|
|
|
(beginning-of-line 1)
|
|
|
(if (looking-at "[ \t]*[^:\n \t]")
|
|
|
nil
|
|
@@ -6463,29 +6480,31 @@ the fragment in the Org-mode buffer."
|
|
|
end (move-marker end end1)
|
|
|
code (buffer-substring-no-properties beg end)
|
|
|
begline (save-excursion (goto-char beg) (org-current-line)))
|
|
|
- (if (get-buffer "*Org Edit Picture*")
|
|
|
- (kill-buffer "*Org Edit Picture*"))
|
|
|
- (switch-to-buffer (get-buffer-create "*Org Edit Picture*"))
|
|
|
- (insert code)
|
|
|
- (remove-text-properties (point-min) (point-max)
|
|
|
- '(display nil invisible nil intangible nil))
|
|
|
- (cond
|
|
|
- ((eq org-edit-fixed-width-region-mode 'artist-mode)
|
|
|
- (fundamental-mode)
|
|
|
- (artist-mode 1))
|
|
|
+ (if (and (setq buffer (org-edit-src-find-buffer beg end))
|
|
|
+ (y-or-n-p "Return to existing edit buffer? [n] will revert changes: "))
|
|
|
+ (switch-to-buffer buffer)
|
|
|
+ (and buffer (kill-buffer buffer))
|
|
|
+ (switch-to-buffer (generate-new-buffer "*Org Edit Picture*"))
|
|
|
+ (insert code)
|
|
|
+ (remove-text-properties (point-min) (point-max)
|
|
|
+ '(display nil invisible nil intangible nil))
|
|
|
+ (cond
|
|
|
+ ((eq org-edit-fixed-width-region-mode 'artist-mode)
|
|
|
+ (fundamental-mode)
|
|
|
+ (artist-mode 1))
|
|
|
(t (funcall org-edit-fixed-width-region-mode)))
|
|
|
- (set (make-local-variable 'org-edit-src-force-single-line) nil)
|
|
|
- (set (make-local-variable 'org-edit-src-from-org-mode) org-mode-p)
|
|
|
- (set (make-local-variable 'org-edit-src-picture) t)
|
|
|
- (goto-char (point-min))
|
|
|
- (while (re-search-forward "^[ \t]*: ?" nil t)
|
|
|
- (replace-match ""))
|
|
|
- (goto-line (1+ (- line begline)))
|
|
|
- (org-exit-edit-mode)
|
|
|
- (org-set-local 'org-edit-src-beg-marker beg)
|
|
|
- (org-set-local 'org-edit-src-end-marker end)
|
|
|
- (and org-edit-src-persistent-message
|
|
|
- (org-set-local 'header-line-format msg))
|
|
|
+ (set (make-local-variable 'org-edit-src-force-single-line) nil)
|
|
|
+ (set (make-local-variable 'org-edit-src-from-org-mode) org-mode-p)
|
|
|
+ (set (make-local-variable 'org-edit-src-picture) t)
|
|
|
+ (goto-char (point-min))
|
|
|
+ (while (re-search-forward "^[ \t]*: ?" nil t)
|
|
|
+ (replace-match ""))
|
|
|
+ (goto-line (1+ (- line begline)))
|
|
|
+ (org-exit-edit-mode)
|
|
|
+ (org-set-local 'org-edit-src-beg-marker beg)
|
|
|
+ (org-set-local 'org-edit-src-end-marker end)
|
|
|
+ (and org-edit-src-persistent-message
|
|
|
+ (org-set-local 'header-line-format msg)))
|
|
|
(message "%s" msg)
|
|
|
t)))
|
|
|
|
|
@@ -6568,8 +6587,7 @@ the language, a switch telling of the content should be in a single line."
|
|
|
(defun org-edit-src-exit ()
|
|
|
"Exit special edit and protect problematic lines."
|
|
|
(interactive)
|
|
|
- (unless (member (buffer-name)
|
|
|
- '("*Org Edit Src Example*" "*Org Edit Picture*"))
|
|
|
+ (unless (string-match "\\`*Org Edit " (buffer-name (current-buffer)))
|
|
|
(error "This is not an sub-editing buffer, something is wrong..."))
|
|
|
(let ((line (if (org-bound-and-true-p org-edit-src-force-single-line)
|
|
|
1
|