C-x s変更を表示するために使用diff
します。代わりにどのように使用できediff
ますか?
2 に答える
3
これを行うためのいくつかのアプローチを見ることができます。1 つ目は、変数を変更されたコードに置き換えることsave-some-buffers-action-alist
です。これはより簡単です。2 つ目は、これらのアクションによって呼び出される関数をアドバイスsave-some-buffers
して再定義することですが、これは少しトリッキーです。
私は両方の方法で試しましたが、これが最良の選択肢だと思います:
;; Use ediff instead of diff in `save-some-buffers'
(eval-after-load "files"
'(progn
(setcdr (assq ?d save-some-buffers-action-alist)
`(,(lambda (buf)
(if (null (buffer-file-name buf))
(message "Not applicable: no file")
(add-hook 'ediff-after-quit-hook-internal
'my-save-some-buffers-with-ediff-quit t)
(save-excursion
(set-buffer buf)
(let ((enable-recursive-minibuffers t))
(ediff-current-file)
(recursive-edit))))
;; Return nil to ask about BUF again.
nil)
,(purecopy "view changes in this buffer")))
(defun my-save-some-buffers-with-ediff-quit ()
"Remove ourselves from the ediff quit hook, and
return to the save-some-buffers minibuffer prompt."
(remove-hook 'ediff-after-quit-hook-internal
'my-save-some-buffers-with-ediff-quit)
(exit-recursive-edit))))
アドバイスを使用する私の試みには欠陥があります (これはC-rも呼び出す動作を壊し、view-buffer
この目的でアドバイスを使用することを再考させました)、しかし FWIW:
(defadvice save-some-buffers (around my-save-some-buffers-with-ediff)
"Use ediff instead of diff."
(require 'cl)
(flet ((view-buffer (&rest) nil)
(diff-buffer-with-file
(buf)
(add-hook 'ediff-after-quit-hook-internal
'my-save-some-buffers-with-ediff-quit t)
(save-excursion
(set-buffer buf)
(ediff-current-file))))
(let ((enable-recursive-minibuffers t))
ad-do-it)))
(ad-activate 'save-some-buffers)
(defun my-save-some-buffers-with-ediff-quit ()
"Remove ourselves from the ediff quit hook, and
return to the save-some-buffers minibuffer prompt."
(remove-hook 'ediff-after-quit-hook-internal
'my-save-some-buffers-with-ediff-quit)
(exit-recursive-edit))
于 2011-02-04T13:32:49.593 に答える
1
変数diff-command
はカスタマイズ可能です、とドキュメントは述べています。ただし、elisp 関数ではなく、外部プログラムを指していることに注意してください。 ediff
ediff.el にある elisp 関数です。diff.el を編集してから diff.elのあちこち(require 'ediff)
を微調整して、他に何も壊れていないことを確認する必要がある場合があります。
于 2011-02-04T09:31:33.470 に答える