0

我有这段代码来突出显示制表符并希望使用项目特定宏禁用它们:

(require 'highlight-chars)
(make-variable-buffer-local 'prevent-highlight-tabs)
(setq highlight-chars-disable '(term-mode erc-mode fundamental-mode))
(setq-default prevent-highlight-tabs nil)
(add-hook 'font-lock-mode-hook
          (lambda()
            (message "lock")
            (when (and (null (memql major-mode highlight-chars-disable))
                       (not prevent-highlight-tabs))
              (message "%s" prevent-highlight-tabs)
              (hc-highlight-tabs))))
(custom-set-faces '(hc-tab ((t (:background "red")))))

并且project-specifics是一个定义 add find-file-hookand dired-after-readin-hookfrom this question的宏

(project-specifics "projects/test"
  (message "specific")
  (setq prevent-highlight-tabs t)
  (setq indent-tabs-mode t))

我想要做的是禁用项目/测试中文件的红色标签(我想要它们,因为在大多数项目中我只想要空格,并且想要查看标签),但我有一个问题,因为font-lock-mode-hook之前执行的代码project-specifics(查找- file-hook),并且 prevent-highlight-tabs 在 font-lock-mode-hook 中始终为零。为什么会这样,以及如何解决?

4

2 回答 2

2

你在做什么似乎令人费解。

它部分未定义(此处)-例如,主要模式是highlight-chars-disable什么?这在库highlight-chars.el中没有定义,听起来也不适合主要模式。

有关建议,请参阅Commentaryhighlight-chars.el

可能是这样的(并且您可以将属性prevent-highlight-tabs放在您喜欢的任何主要模式符号上:

(add-hook 'font-lock-mode-hook
          (lambda () (unless (get major-mode 'prevent-highlight-tabs)
                       (hc-highlight-tabs))))

或类似的东西(来自Commentary):

(add-hook 'change-major-mode-hook
          (lambda ()
            (add-hook 'font-lock-mode-hook 'hc-highlight-tabs)))

(add-hook 'after-change-major-mode-hook
          (lambda ()
            (when (eq major-mode 'THE-MODE)
              (remove-hook 'font-lock-mode-hook 'hc-highlight-tabs)
              (hc-dont-highlight-tabs)))
          'APPEND)
于 2014-03-27T18:23:30.793 回答
2

我建议您.dir-locals.el按照Per-Directory Local Variables中的说明进行设置。

于 2014-03-27T19:07:14.470 回答