summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarsten Dominik <carsten.dominik@gmail.com>2009-08-24 14:47:58 +0200
committerCarsten Dominik <carsten.dominik@gmail.com>2009-08-28 09:58:20 +0200
commit4b6988bf36cb458c9d113ee4332e016990c1eb04 (patch)
tree48ac7af35bd8506acc9dce99b98adfc6d9b1d096
parentf88f4fc4fb5f6eac898ae42fce3f15b707f01361 (diff)
downloadorg-mode-4b6988bf36cb458c9d113ee4332e016990c1eb04.tar.gz
Make editing src snippets work better with killing buffers and exiting emacs
Patch by Dan Davison. For more information, see http://thread.gmane.org/gmane.emacs.orgmode/14142/focus=16378
-rw-r--r--lisp/org-src.el29
1 files changed, 22 insertions, 7 deletions
diff --git a/lisp/org-src.el b/lisp/org-src.el
index e1a5382..fea848b 100644
--- a/lisp/org-src.el
+++ b/lisp/org-src.el
@@ -128,7 +128,6 @@ For example, there is no ocaml-mode in Emacs, but the mode to use is
(defvar org-src-mode-map (make-sparse-keymap))
(define-key org-src-mode-map "\C-c'" 'org-edit-src-exit)
-(define-key org-src-mode-map "\C-x\C-s" 'org-edit-src-save)
(defvar org-edit-src-force-single-line nil)
(defvar org-edit-src-from-org-mode nil)
(defvar org-edit-src-picture nil)
@@ -185,7 +184,8 @@ the edited version."
(if (boundp 'org-edit-src-overlay)
(org-delete-overlay org-edit-src-overlay)))
(kill-buffer buffer))
- (setq buffer (generate-new-buffer "*Org Edit Src Example*"))
+ (setq buffer (generate-new-buffer
+ (concat "*Org Src " (file-name-nondirectory buffer-file-name) "[" lang "]*")))
(setq ovl (org-make-overlay beg end))
(org-overlay-put ovl 'face 'secondary-selection)
(org-overlay-put ovl 'edit-buffer buffer)
@@ -203,8 +203,7 @@ the edited version."
'(display nil invisible nil intangible nil))
(org-do-remove-indentation)
(let ((org-inhibit-startup t))
- (funcall lang-f)
- (org-src-mode))
+ (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
@@ -218,6 +217,8 @@ the edited version."
(org-set-local 'org-edit-src-end-marker end)
(org-set-local 'org-edit-src-overlay ovl)
(org-set-local 'org-edit-src-nindent nindent)
+ (org-src-mode)
+ (set-buffer-modified-p nil)
(and org-edit-src-persistent-message
(org-set-local 'header-line-format msg)))
(message "%s" msg)
@@ -318,6 +319,7 @@ the fragment in the Org-mode buffer."
(replace-match ""))
(org-goto-line (1+ (- line begline)))
(org-src-mode)
+ (set-buffer-modified-p nil)
(org-set-local 'org-edit-src-beg-marker beg)
(org-set-local 'org-edit-src-end-marker end)
(org-set-local 'org-edit-src-overlay ovl)
@@ -417,8 +419,8 @@ 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 (string-match "\\`*Org Edit " (buffer-name (current-buffer)))
- (error "This is not an sub-editing buffer, something is wrong..."))
+ (unless org-edit-src-from-org-mode
+ (error "This is not a sub-editing buffer, something is wrong..."))
(let ((beg org-edit-src-beg-marker)
(end org-edit-src-end-marker)
(ovl org-edit-src-overlay)
@@ -458,10 +460,10 @@ the language, a switch telling of the content should be in a single line."
(while (re-search-forward "^" nil t)
(replace-match nindent)))
(setq code (buffer-string))
+ (set-buffer-modified-p nil)
(switch-to-buffer (marker-buffer beg))
(kill-buffer buffer)
(goto-char beg)
- (org-delete-overlay ovl)
(delete-region beg end)
(insert code)
(goto-char beg)
@@ -481,6 +483,19 @@ the language, a switch telling of the content should be in a single line."
(goto-char (min p (point-max)))
(message (or msg ""))))
+(defun org-src-mode-configure-edit-buffer ()
+ (when org-edit-src-from-org-mode
+ (setq buffer-offer-save t)
+ (setq buffer-file-name
+ (concat (buffer-file-name (marker-buffer org-edit-src-beg-marker))
+ "[" (buffer-name) "]"))
+ (set (if (featurep 'xemacs) 'write-contents-hooks 'write-contents-functions)
+ '(org-edit-src-save))
+ (org-add-hook 'kill-buffer-hook
+ '(lambda () (org-delete-overlay org-edit-src-overlay)) nil 'local)))
+
+(org-add-hook 'org-src-mode-hook 'org-src-mode-configure-edit-buffer)
+
(provide 'org-src)
;; arch-tag: 6a1fc84f-dec7-47be-a416-64be56bea5d8