aboutsummaryrefslogtreecommitdiffstats
path: root/lisp
diff options
context:
space:
mode:
authorChong Yidong <[email protected]>2006-06-06 14:06:13 +0000
committerChong Yidong <[email protected]>2006-06-06 14:06:13 +0000
commit53dd481c3fc408b0ebf32ae37a5884b3bd47cfee (patch)
treebec76072886098a3ff1f411ab11c71e1de1a9d58 /lisp
parent2e8e9e91955f7b75e832246a9de8763347353936 (diff)
* 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')
-rw-r--r--lisp/ChangeLog10
-rw-r--r--lisp/diff-mode.el3
-rw-r--r--lisp/diff.el32
3 files changed, 35 insertions, 10 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 10a133e645..0dc4bdbba4 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,13 @@
+2006-06-06 Chong Yidong <[email protected]>
+
+ * 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 <[email protected]>
* textmodes/org.el: (org-archive-subtree): Use end-of-subtree as
diff --git a/lisp/diff-mode.el b/lisp/diff-mode.el
index 1a8402e06c..f78ce1ae15 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 221d7b2e36..534a84d431 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.