バッファを保存するたびにタブを抑制したいです。これは私がEmacs 24にアップグレードするまでうまくいきましたmake-local-hook
。視聴する:
;;; 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) ))
編集する
次の助けを借りて操作してください。これ場所。
皮肉なことに、以前のソリューション(使用make-local-hook
)を使用すると、何とかこの結果が得られました。グローバル(それでGNU makefileのチェックを追加する必要がありました)。
今これはローカルのようです。保存するたびに確認する必要がないので大丈夫です。 untabifyが実行する必要があるモードを指定します。 (終了するまでタップを探すたびに1つずつ追加すればいいようです。
しかし、さらに混乱するように、HTMLモードは介入なしにこれを行うようです。上記のコードを読むと、以前のソリューションでもHTMLがフェレットの間の猫であることがわかります。
とにかく、これはうまくいくようです:
(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)
答え1
Emacs 24は代わりにLOCAL
引数を使用します。 (私はこれがEmacs 21.1に追加されたと思いますが、Emacs 24までは削除されませんでした。)add-hook
make-local-hook
make-local-hook
この試み:
(add-hook 'emacs-lisp-mode-hook
'(lambda ()
(add-hook 'write-contents-hooks 'untab-all nil t) ))
もう1つの問題は、バッファをディスクに書き込んでいないことを示すためにuntab-all
返す必要があることです(文書に記載されているように、または今すぐ呼び出されます)。nil
write-contents-hooks
write-contents-functions
(defun untab-all ()
(unless (and (stringp mode-name)
(string= mode-name "GNUmakefile") )
(untabify (point-min) (point-max)) )
nil) ; did not write buffer to disk