emacs - 如何根据文件位置运行 Hook

标签 emacs elisp

我参与了使用选项卡的 python 项目,但是我没有在我编写的所有其他代码中使用它们,在该特定项目中使用它们至关重要。项目位于特定目录下的一个目录中。 IE:

\main_folder
    \project1
    \project2
    \project3
...etc

我在文件打开时有几个函数/钩子(Hook),并保存我正在处理的 untabify 和 tabify 整个缓冲区。
 ;; My Functions
(defun untabify-buffer ()
            "Untabify current buffer"
        (interactive)
        (untabify (point-min) (point-max)))

(defun tabify-buffer ()
        "Tabify current buffer"
        (interactive)
        (tabify (point-min) (point-max)))

;; HOOKS
; untabify buffer on open
(add-hook 'find-file-hook 'untabify-buffer)
; tabify on save
(add-hook 'before-save-hook 'tabify-buffer)

如果我把它放在 .emacs 文件中,它会在我打开的每个 .py 文件上运行,这不是我想要的。我想要的是让这些钩子(Hook)仅在一个具有相应子文件夹的特定文件夹中使用。试过 .dir_locals 但它只适用于属性而不是钩子(Hook)。我不能在特定模式(即 python 模式)下使用钩子(Hook),因为几乎所有项目都是用 python 编写的。老实说,我尝试编写 elisp 条件保存但失败了。

最佳答案

一个非常简单的解决方案是添加一个可用于禁用 Hook 的配置变量。例如:

(defvar tweak-tabs t)
(add-hook 'find-file-hook
          (lambda () (when tweak-tabs (untabify (point-min) (point-max)))))
(add-hook 'before-save-hook
          (lambda () (when tweak-tabs (tabify (point-min) (point-max)))))

现在您可以添加 .dir-locals.el相关目录中的文件,设置tweak-tabsnil ,在此处禁用此功能。

(但另一个问题是这是处理选项卡的一种非常糟糕的方式。例如,在您保存文件后,您确实会看到其中的选项卡。)

关于emacs - 如何根据文件位置运行 Hook ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6368742/

相关文章:

emacs xterm-mouse-mode 双击突出显示单词

emacs - symbol-plist 返回具有值的 elisp 符号的列表

elisp - 如何按扩展名获取文件列表?

emacs - 使用 knit-ess 进行 Polymode 编织 - tex 文件名中不需要 "woven"

emacs - 如何在 lisp 函数中使用键盘宏直到失败

emacs - 使用projectile在.dir-locals中设置flycheck-clang-include-path

emacs - 如何在 js2-mode 中禁用换行符的自动缩进?

pdf - elisp:生成 LaTeX PDF 文档

emacs - 在 Emacs Lisp 中使用 obarray 而不是哈希表有什么好处吗?

emacs - emacs lisp 中词法绑定(bind)和 defvar 之间的奇怪交互