2013-06-21 10 views
5

Emacs dice,Come agganciare in "tampone si è ridotto molto" in Emacs

foo.txt Buffer si è ridotto molto; Auto Save disabile in quel buffer fino al prossimo vero e proprio risparmio

quando rileva che un sacco di testo è andato su auto di risparmiare tempo, e disattiva il salvataggio automatico, a meno che auto-save-include-big-deletions è non-zero.

Come posso collegare questo evento di Emacs rilevando che il buffer si è ridotto molto? Voglio agganciarlo perché voglio impostare un buffer-local flag ogni volta che il buffer si restringe molto in modo che quando faccio lo save-some-buffers, uno dei suoi consigli rilevi la flag e mi dica "hey, questo buffer si è ridotto molto non dimenticarti di vedere diff per essere certo di non aver eliminato per errore un grosso pezzo ". Sarebbe bello oltre ai backup. Semplicemente confrontando le dimensioni del buffer prima di salvare e il file salvato non riuscirebbe a rilevare il caso di aggiungere molto, quindi eliminare un lotto per errore, quindi salvare.

+0

Questa logica sembra essere implementata nel codice C ... forse non è facile collegarsi ad esso. Hai preso in considerazione l'utilizzo di un "find-file-hook" per impostare la dimensione del file iniziale (- (point-max) (point-min)) e confrontando la dimensione corrente con quel valore quando si esegue "save-some-buffers"? – juanleon

+0

Utilizzando find-file-hook, non è possibile rilevare casi di un utente che aggiunge un sacco di nuovo testo, quindi eliminare un sacco di vecchio testo per errore, quindi salvare (tutto in Emacs) –

risposta

4

Il auto-save-hook viene eseguito prima del controllo che genera quel messaggio, quindi è possibile replicare la logica nel codice C per fare ciò che si desidera. Quindi puoi aggiungere una funzione a quel gancio.

Questa è (AFAIK) la logica utilizzata nel codice C.

(when (and auto-save-include-big-deletions 
      buffer-file-name 
      (> (* 10 (nth 7 (file-attributes buffer-file-name))) 
       (* 13 (buffer-size))) 
      (> (nth 7 (file-attributes buffer-file-name)) 5000)) 
    ;; do something 
) 

Nota: sembra che il gancio venga eseguito anche quando il salvataggio automatico è stato disabilitato.

Problemi correlati