Mercurial > emacs
changeset 71248:3071d2ae4624
* 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.
author | Chong Yidong <cyd@stupidchicken.com> |
---|---|
date | Tue, 06 Jun 2006 14:06:13 +0000 |
parents | 4ea60a122f54 |
children | 3798a822991e |
files | lisp/ChangeLog lisp/diff-mode.el lisp/diff.el |
diffstat | 3 files changed, 35 insertions(+), 10 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/ChangeLog Tue Jun 06 08:27:21 2006 +0000 +++ b/lisp/ChangeLog Tue Jun 06 14:06:13 2006 +0000 @@ -1,3 +1,13 @@ +2006-06-06 Chong Yidong <cyd@stupidchicken.com> + + * 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 <dominik@science.uva.nl> * textmodes/org.el: (org-archive-subtree): Use end-of-subtree as
--- a/lisp/diff-mode.el Tue Jun 06 08:27:21 2006 +0000 +++ b/lisp/diff-mode.el Tue Jun 06 14:06:13 2006 +0000 @@ -993,8 +993,7 @@ ;; 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)
--- a/lisp/diff.el Tue Jun 06 08:27:21 2006 +0000 +++ b/lisp/diff.el Tue Jun 06 14:06:13 2006 +0000 @@ -67,9 +67,10 @@ (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 @@ (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 @@ (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.