Eu gostaria de desabilitar sempre que eu salvar um buffer. Isso funcionou bem até que eu atualizei para o Emacs 24, que quebrou, já que não há mais make-local-hook
. Dê uma olhada:
;;; untabify on C-x C-s (except for GNUmakefiles that needs tabs)
;;; (note: 'stringp' check to avoid bug (?) in HTML-mode)
(defun untab-all ()
(unless (and (stringp mode-name)
(string= mode-name "GNUmakefile") )
(untabify (point-min) (point-max)) ))
;; TODO: doesn't work anymore as no make-local-hook in Emacs 24 -
;; it won't work with simply dropping that line,
;; or doing that, and passing a 4th 't' argument in the second
;; add-hook call (which is the LOCAL parameter)
;; (add-hook 'emacs-lisp-mode-hook
;; '(lambda ()
;; (make-local-hook 'write-contents-hooks)
;; (add-hook 'write-contents-hooks 'untab-all) ))
EDITAR
Consegui-lo para trabalhar com a ajuda abaixo e este site .
O mais irônico é que, com a minha solução antiga (usando make-local-hook
), de alguma forma eu tenho isso globalmente (é por isso que eu tive que adicionar essa verificação para makefiles do GNU).
Agora, isso parece ser uma coisa local: isso é bom, já que o teste não precisa ser feito a cada salvamento; apenas, você tem que declarar quais modos o untabify deve ser feito. (Eu acho que você poderia simplesmente adicioná-los um por um à medida que avançasse, cada vez que você descobrisse uma aba, até que você terminasse. Embora pareça que você está usando 5-6 modos, quando você pensa sobre isso, você usa toneladas!)
Mas, para confundir ainda mais as coisas, o modo HTML parece fazer isso, sem intervenção! Se você ler o código acima, verá que mesmo para a solução antiga, o HTML era o gato entre as minas ...
De qualquer forma, isso parece funcionar:
(defun untab-all ()
(untabify (point-min) (point-max))
nil ) ; did not write buffer to disk
(defun add-write-contents-hooks-hook ()
(add-hook
'write-contents-hooks
'untab-all
nil ; APPEND unrelated, explicit default nil as optional :)
t )) ; LOCAL non-nil => make hook local
;; more modes: http://www.emacswiki.org/CategoryModes
(add-hook 'emacs-lisp-mode-hook #'add-write-contents-hooks-hook)
(add-hook 'c-mode-common-hook #'add-write-contents-hooks-hook)
(add-hook 'sh-mode-hook #'add-write-contents-hooks-hook)
(add-hook 'text-mode-hook #'add-write-contents-hooks-hook)
(add-hook 'sql-mode-hook #'add-write-contents-hooks-hook)
(add-hook 'css-mode-hook #'add-write-contents-hooks-hook)