【问题标题】:How to highlight tab characters for files from specific project in Emacs如何在 Emacs 中突出显示来自特定项目的文件的制表符
【发布时间】:2014-03-27 16:50:59
【问题描述】:

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

(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 是一个宏,它定义了从这个question 添加find-file-hookdired-after-readin-hook

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

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

【问题讨论】:

  • 内置的whitespace-mode 可能对你有用。 (根据您的需要,它也可能过于杀戮和过于复杂,但当然值得一玩。)
  • @phils 我想在第一次尝试时使用空白模式,但后来有人建议改用highlight-chars

标签: emacs elisp whitespace font-lock


【解决方案1】:

你在做什么似乎很复杂。

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

请参阅库 highlight-chars.elCommentary 获取建议。

可能是这样的(并且您可以将属性 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)

【讨论】:

  • 抱歉没有包含highlight-chars-disable,这是一个不应该有标签的模式列表。
【解决方案2】:

我建议您将设置放在.dir-locals.el 中,如Per-Directory Local Variables 中所述。

【讨论】:

    猜你喜欢
    • 2022-12-05
    • 2014-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-10
    • 2012-02-02
    • 2021-08-22
    相关资源
    最近更新 更多