From 765ff97a9170e02e860a63739ed0cb4a0ebde87b Mon Sep 17 00:00:00 2001 From: Le Wang Date: Sat, 8 Sep 2012 22:47:13 +0800 Subject: [PATCH 1/2] ask user for input when killing edit buffer --- servers/edit-server.el | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/servers/edit-server.el b/servers/edit-server.el index 6067d50..c52321b 100644 --- a/servers/edit-server.el +++ b/servers/edit-server.el @@ -457,7 +457,7 @@ to `edit-server-default-major-mode'" ;; hooks early on (run-hooks 'edit-server-start-hook) (not-modified) - (add-hook 'kill-buffer-hook 'edit-server-abort* nil t) + (add-hook 'kill-buffer-query-functions 'edit-server-kill-query nil t) (buffer-enable-undo) (setq edit-server-proc proc edit-server-frame (edit-server-create-frame buffer)) @@ -579,6 +579,28 @@ but don't kill the editing buffer." (interactive) (edit-server-done t t)) +(defvar edit-server-kill-query-string + (concat + ;; prevent using minibuffer-prompt face + (propertize "(" 'face 'default) + (propertize "s" 'face '(:foreground "ForestGreen")) + ")ubmit changes (" + (propertize "k" 'face '(:foreground "Firebrick")) + ")ill changes?")) + +(defun edit-server-kill-query () + "Ask user what to do when killing edit buffer." + (if (buffer-modified-p (current-buffer)) + (progn + (case (read-char-choice + edit-server-kill-query-string + (append "sSKk" nil)) + ((?s ?S) (edit-server-save)) + ((?k ?K) (edit-server-abort*))) + t) + (edit-server-abort*) + t)) + (provide 'edit-server) ;;; edit-server.el ends here From b5494de31c1645121047d43682d78cd52d6f9c84 Mon Sep 17 00:00:00 2001 From: Le Wang Date: Sat, 8 Sep 2012 23:00:24 +0800 Subject: [PATCH 2/2] refine edit-server-done make abort possible while killing buffer --- servers/edit-server.el | 27 +++++++++------------------ 1 file changed, 9 insertions(+), 18 deletions(-) diff --git a/servers/edit-server.el b/servers/edit-server.el index c52321b..c323a0a 100644 --- a/servers/edit-server.el +++ b/servers/edit-server.el @@ -541,11 +541,11 @@ When called interactively, use prefix arg to abort editing." (dolist (format buffer-file-format) (format-decode-region (point-min) (point-max) format)) (buffer-enable-undo))) - (when edit-server-frame - (delete-frame edit-server-frame)) ;; delete-frame may change the current buffer (unless nokill (kill-buffer buffer)) + (when edit-server-frame + (delete-frame edit-server-frame)) (edit-server-kill-client proc)))) ;; @@ -573,12 +573,6 @@ When called interactively, use prefix arg to abort editing." (interactive) (edit-server-done t)) -(defun edit-server-abort* () - "Discard editing and send the original text back to the browser, -but don't kill the editing buffer." - (interactive) - (edit-server-done t t)) - (defvar edit-server-kill-query-string (concat ;; prevent using minibuffer-prompt face @@ -590,16 +584,13 @@ but don't kill the editing buffer." (defun edit-server-kill-query () "Ask user what to do when killing edit buffer." - (if (buffer-modified-p (current-buffer)) - (progn - (case (read-char-choice - edit-server-kill-query-string - (append "sSKk" nil)) - ((?s ?S) (edit-server-save)) - ((?k ?K) (edit-server-abort*))) - t) - (edit-server-abort*) - t)) + (when (buffer-modified-p (current-buffer)) + (case (read-char-choice + edit-server-kill-query-string + (append "sSKk" nil)) + ((?s ?S) (edit-server-done)) + ((?k ?K) (edit-server-done t t)))) + t) (provide 'edit-server)