"Arabellek salt okunur" uyarısını devre dışı bırakmanın bir yolu var mı?


9

Bu uyarıyı özellikle yararlı ve oldukça rahatsız edici bulmuyorum çünkü mevcut metni kısa bir süre için yankı alanındaki gizler. Ayrıca gereksiz görünüyor, çünkü yine de salt okunur alanlarda yazamadığımı fark edeceğim. Devre dışı bırakmanın bir yolu var mı?

Yanıtlar:


9

Evet, sinyalleri command-error-functionyok sayan bir işleve ayarlayarak bu mesajları devre dışı bırakabilirsiniz buffer-read-only.

(defun my-command-error-function (data context caller)
  "Ignore the buffer-read-only signal; pass the rest to the default handler."
  (when (not (eq (car data) 'buffer-read-only))
    (command-error-default-function data context caller)))

(setq command-error-function #'my-command-error-function)

(GNU Emacs 24.5.1 kullanılarak test edilmiştir.)


Meraktan ötürü, command-error-functiondeğerin geçersiz kılınması sadece "salt okunur tampon" hatalarını değil tüm hataları etkilemez mi? Tüm bu değişikliğin kaynak koddan ne etkileyeceğini tam olarak anlayamıyorum.
Kaushal Modi

1
Evet, olurdu. Tam olarak bu yüzden (when ...)kod snippet'inde formum var: umursadığımız sinyaller varsayılan işleyiciye iletilir ve buffer-read-onlyyok sayılır.
Konstantin

Ah tamam, o çağrıyı tamamen kaçırdım command-error-default-function.
Kaushal Modi

1
Tatlım, sadece "Metin salt okunur" çöpünden sadece minibuffer'dan kurtulmanın kolay bir yolunu arıyordum ve bu hile yapıyor.
whacka

1
@mcb: Bildiğim kadarıyla yankı alanını ve mini arabelleği ayırmak mümkün değil. Ben inanıyorum tarafından cevap philsBağlı olduğu için , doğru olduğunu bunun için yeni C kodu gerekir yani.
Konstantin

3

'Arabellek salt okunur' hatasının kaynağı

Bu hatanın Buffer is read-only: <#BUFFER-NAME>kaynağının C kaynak kodunda olduğuna inanıyorum .

Bu yüzden çözüm, kaynak kodunu değiştirmek ve bu belirli satırı yorumlayarak yerel olarak emacs oluşturmak olacaktır .

Başvuru için, bu hatayı atan kod pasajı şöyledir:

if (!NILP (BVAR (current_buffer, read_only))
    && NILP (Vinhibit_read_only)
    && NILP (Fget_text_property (pos, Qinhibit_read_only, Qnil)))
  xsignal1 (Qbuffer_read_only, Fcurrent_buffer ());
return Qnil;

.. ve bu xsignalçizgiyi yorumlamak hile yapmalı.


Önerilen Yaklaşım

Salt okunur bir arabellekte çalıştığınız süre boyunca bu rahatsızlığı önlemenin çok daha kolay bir yolu var ... geçici olarak salt okunur yapamazsınız.

  • Bunu yapmak M-x read-only-mode(varsayılan olarak bağlı C-x C-q), tüm arabellekleri salt okunur mod ile düzenlenebilir mod arasında değiştirir.

Dolayısıyla, bu hataların çoğunu alıyorsanız, tamponu vurarak geçici olarak düzenlenebilir hale getirin C-x C-q.


Uyarı notu: C kaynağı kesmek, gelecekte büyük bir karışıklık kaynağı olabilir. Bu yüzden yapmam.


1
Anlayabildiğim kadarıyla çağrıyı (defun barf-if-buffer-read-only () nil)yorumlamak xsignal1ve Emacs'ı yeniden oluşturmakla aynı etkiye sahiptir . :-)
Konstantin

@Erisp'te C işlevlerini geçersiz kılabileceğimiz sabit TIL. Teşekkürler!
Kaushal Modi

Elisp kullanarak şeyleri değiştirmeyle ilgili: bu bana şu eski soruyu hatırlatıyor nil: emacs.stackexchange.com/questions/2935/how-can-i-bring-back-nil
Constantine
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.