特定のモードのフックを削除する


12

以外のすべてのモードで保存時に末尾の空白を削除したいorg-mode

.emacsには、次の行があります:

(add-hook 'before-save-hook 'delete-trailing-whitespace)

use-packageマクロを使用し(remove-hook 'before-save-hook 'delete-trailing-whitespace)て、:configブロックに追加しようとしましたが、フックがグローバルに削除されました。どうすれば削除できorg-modeますか?

回答:


17

use-packageマクロの経験はありませんが、原則としてremove-hook、ローカルフックからのみ関数を削除するように指示する3番目の引数を使用できます。

(remove-hook 'before-save-hook 'delete-trailing-whitespace t)

参照用のdocstringは次のとおりです。

(remove-hook HOOK FUNCTION &optional LOCAL)

HOOK関数の値から削除します。HOOKはシンボルである必要があり、FUNCTIONは任意の有効な関数である可能性があります。FUNCTIONがHOOKの値でない場合、またはFUNCTIONがHOOKで実行するフックのリストに表示されない場合、何も行われません。を参照してくださいadd-hook

オプションの3番目の引数LOCALは、nilでない場合、デフォルト値ではなく、フックのバッファーローカル値を変更するように指示します。


完璧に動作します、ありがとうございます。へのもう一つの素晴らしいリマインダーC-h f。タイマーが切れたらすぐに受け入れます。
Matthew Piziak

2
@MatthewPiziak:気分が良くなると、その3番目の引数を取ることに気づくまでに非常に長い時間がかかり、このサイトの誰かが私にそれを指摘した後でした。
ダン

2
これは、関数が最初にLOCALとして明示的に追加された場合にのみ機能add-hookしませんか?(24.5での簡単なテストは私の期待を確認するようです...この種のオーバーライドを容易にするトランクに新しい機能がありますか?)
phils
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.