diff options
author | Chong Yidong <cyd@stupidchicken.com> | 2006-06-06 14:06:13 +0000 |
---|---|---|
committer | Chong Yidong <cyd@stupidchicken.com> | 2006-06-06 14:06:13 +0000 |
commit | 53dd481c3fc408b0ebf32ae37a5884b3bd47cfee (patch) | |
tree | bec76072886098a3ff1f411ab11c71e1de1a9d58 /lisp/diff.el | |
parent | 2e8e9e91955f7b75e832246a9de8763347353936 (diff) | |
download | emacs-53dd481c3fc408b0ebf32ae37a5884b3bd47cfee.tar.gz |
* diff-mode.el (diff-mode): Set buffer-read-only to t when
diff-default-read-only is non-nill.
* diff.el (diff-sentinel, diff): Set inhibit-read-only to t when
modifying the *Diff* buffer.
(diff-process-filter): New filter function for diff process that
sets inhibit-read-only to t when modifying the *Diff* buffer.
Diffstat (limited to 'lisp/diff.el')
-rw-r--r-- | lisp/diff.el | 32 |
1 files changed, 24 insertions, 8 deletions
diff --git a/lisp/diff.el b/lisp/diff.el index 221d7b2e363..534a84d4317 100644 --- a/lisp/diff.el +++ b/lisp/diff.el @@ -67,9 +67,10 @@ CODE is the exit code of the process. It should be 0 iff no diffs were found." (if diff-new-temp-file (delete-file diff-new-temp-file)) (save-excursion (goto-char (point-max)) - (insert (format "\nDiff finished%s. %s\n" - (if (equal 0 code) " (no differences)" "") - (current-time-string))))) + (let ((inhibit-read-only t)) + (insert (format "\nDiff finished%s. %s\n" + (if (equal 0 code) " (no differences)" "") + (current-time-string)))))) ;;;###autoload (defun diff (old new &optional switches no-async) @@ -119,7 +120,8 @@ With prefix arg, prompt for diff switches." (set-buffer buf) (setq buffer-read-only nil) (buffer-disable-undo (current-buffer)) - (erase-buffer) + (let ((inhibit-read-only t)) + (erase-buffer)) (buffer-enable-undo (current-buffer)) (diff-mode) (set (make-local-variable 'revert-buffer-function) @@ -128,21 +130,35 @@ With prefix arg, prompt for diff switches." (set (make-local-variable 'diff-old-temp-file) old-alt) (set (make-local-variable 'diff-new-temp-file) new-alt) (setq default-directory thisdir) - (insert command "\n") + (let ((inhibit-read-only t)) + (insert command "\n")) (if (and (not no-async) (fboundp 'start-process)) (progn (setq proc (start-process "Diff" buf shell-file-name shell-command-switch command)) + (set-process-filter proc 'diff-process-filter) (set-process-sentinel proc (lambda (proc msg) (with-current-buffer (process-buffer proc) (diff-sentinel (process-exit-status proc)))))) ;; Async processes aren't available. - (diff-sentinel - (call-process shell-file-name nil buf nil - shell-command-switch command)))) + (let ((inhibit-read-only t)) + (diff-sentinel + (call-process shell-file-name nil buf nil + shell-command-switch command))))) buf)) +(defun diff-process-filter (proc string) + (with-current-buffer (process-buffer proc) + (let ((moving (= (point) (process-mark proc)))) + (save-excursion + ;; Insert the text, advancing the process marker. + (goto-char (process-mark proc)) + (let ((inhibit-read-only t)) + (insert string)) + (set-marker (process-mark proc) (point))) + (if moving (goto-char (process-mark proc)))))) + ;;;###autoload (defun diff-backup (file &optional switches) "Diff this file with its backup file or vice versa. |