“Arabelleği gerçekten düzenle” seçeneğinde, emac'lar otomatik olarak ediff-current-file dosyasını çalıştırıyor mu?


12

bağlam

Emacs, bir dosyanın düzenleme arabelleğinin dışında değiştirildiğini algıladığında.

gözlemlenen

emacs soracak:

diskte bazı dosya adı değiştirildi; arabellek gerçekten düzenlemek? (y, n, r veya Ch)

(Bu arada, bazen gerçek bir değişiklik olmadığında bile olur, örneğin sürüklenen saatli bir sunucudaki uzak dosya, ancak soru her durumda ilginçtir.)

diledi

emacs sorar:

diskte bazı dosya adı değiştirildi; arabellek gerçekten düzenlemek? (y, n, r, d veya Ch)

Tuşuna basıldığında d, sürümler arasındaki fark gösterilir; ediff-current-filebu, farkların etkileşimli olarak yürümesine izin verir.

Ek bilgi

Bu, Debian paket yönetiminin yerel olarak özelleştirilmiş bir yapılandırma dosyasının sahip olduğu paketin daha yeni bir sürümü tarafından güncellendiğini algıladığında yaptığı şeye benzer. Örnek için bkz. / Etc / default / grub yapılandırma dosyasının yeni bir sürümü var, ancak şu anda yüklü sürüm yerel olarak değiştirildi - Unix ve Linux Stack Exchange

Sormadan önce ara

Genellikle çözümler için yolumu buluyorum (örn. Emacsclient - Harici bir komut dosyasından, açık dosya ve emacs zaten çalışıyor olsun ya da olmasın - bazı basit ifade çalıştırın - Emacs Stack Exchange ) ama bu arama sonra önceden mevcut herhangi bir çözüm bulamadık.

Bunu kendim ayarlamayı düşünürdüm ama emacs-lisp ve emacs içlerinde yeterince yetkin değilim.

Çözüm taslağı

  • C-gO zaman 'Mx ediff-current-file` tuşuna basıldığında , bazı tuş vuruşları pahasına iş yapılır.
  • Buradaki amaç ediff-current-fileyukarıdaki istemde bir tuşa basmak olacaktır .


@Gilles teşekkür ederim. Evet, ilgili ve farklı. Bağlantınız dosya açma süresi ile ilgilidir. Burada dosya tasarrufu zamanı.
Stéphane Gourichon

Yanıtlar:


2

emacs kaynak "gerçekten arabellek düzenleme" için greppingask-user-about-supersession-threat dosyada işlev buldum userlock.el.

dAramak için bir seçenek eklemek basit görünüyor ediff-current-file. Ancak, bu kapsamlı test etmedim (düzenlemeler ;;-yorumlarla işaretlenmiş ).

(defun ask-user-about-supersession-threat (fn)
  "Ask a user who is about to modify an obsolete buffer what to do.
This function has two choices: it can return, in which case the modification
of the buffer will proceed, or it can (signal 'file-supersession (file)),
in which case the proposed buffer modification will not be made.

You can rewrite this to use any criterion you like to choose which one to do.
The buffer in question is current when this function is called."
  (discard-input)
  (save-window-excursion
    (let ((prompt
       (format "%s changed on disk; \
really edit the buffer? (y, n, r, d or C-h) " ;;- changed
           (file-name-nondirectory fn)))
      (choices '(?y ?n ?r ?d ?? ?\C-h))       ;;- changed
      answer)
      (while (null answer)
    (setq answer (read-char-choice prompt choices))
    (cond ((memq answer '(?? ?\C-h))
           (ask-user-about-supersession-help)
           (setq answer nil))
          ((eq answer ?r)
           ;; Ask for confirmation if buffer modified
           (revert-buffer nil (not (buffer-modified-p)))
           (signal 'file-supersession
               (list "File reverted" fn)))
          ((eq answer ?d)                     ;;- added
           (ediff-current-file))              ;;- added
          ((eq answer ?n)
           (signal 'file-supersession
               (list "File changed on disk" fn)))))
      (message
       "File on disk now will become a backup file if you save these changes.")
      (setq buffer-backed-up nil))))

Ubuntu 16.04'te emacs 46.1 üzerinde iyi çalışıyor gibi görünüyor. Teşekkürler!
Stéphane Gourichon
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.