diff options
author | Carsten Dominik <carsten.dominik@gmail.com> | 2009-08-24 14:47:58 +0200 |
---|---|---|
committer | Carsten Dominik <carsten.dominik@gmail.com> | 2009-08-28 09:58:20 +0200 |
commit | 4b6988bf36cb458c9d113ee4332e016990c1eb04 (patch) | |
tree | 48ac7af35bd8506acc9dce99b98adfc6d9b1d096 | |
parent | f88f4fc4fb5f6eac898ae42fce3f15b707f01361 (diff) | |
download | org-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.el | 29 |
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 |