From 53dd481c3fc408b0ebf32ae37a5884b3bd47cfee Mon Sep 17 00:00:00 2001 From: Chong Yidong Date: Tue, 6 Jun 2006 14:06:13 +0000 Subject: [PATCH] * 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. --- lisp/ChangeLog | 10 ++++++++++ lisp/diff-mode.el | 3 +-- lisp/diff.el | 32 ++++++++++++++++++++++++-------- 3 files changed, 35 insertions(+), 10 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 10a133e6456..0dc4bdbba45 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,13 @@ +2006-06-06 Chong Yidong + + * 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. + 2006-06-06 Carsten Dominik * textmodes/org.el: (org-archive-subtree): Use end-of-subtree as diff --git a/lisp/diff-mode.el b/lisp/diff-mode.el index 1a8402e06c4..f78ce1ae155 100644 --- a/lisp/diff-mode.el +++ b/lisp/diff-mode.el @@ -993,8 +993,7 @@ a diff with \\[diff-reverse-direction]." ;; compile support (set (make-local-variable 'next-error-function) 'diff-next-error) - (when (and (> (point-max) (point-min)) diff-default-read-only) - (toggle-read-only t)) + (setq buffer-read-only diff-default-read-only) ;; setup change hooks (if (not diff-update-on-the-fly) (add-hook 'write-contents-functions 'diff-write-contents-hooks nil t) 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. -- 2.39.5