如何更改特定基本模式缓冲区的变量

时间:2012-10-16 10:59:12

标签: emacs advising-functions defadvice

目标:我希望为所有缓冲区启用show-trailing-whitespace,只需保存一些。出现问题的例外情况为*Shell Command Output*及其表兄*Async Shell Command*

我通常会show-trailing-whitespace自定义t。因此它在所有新缓冲区中都是活动的。

我还希望关闭某些缓冲区,其中最重要的是*Shell Command Output*。这给我带来了一个问题:

  • 输出缓冲区不使用特殊模式;它仍然在fundamental-mode。没有fundamental-mode-hook我可以将此设置挂钩。
  • 主要模式更改为after-major-mode-change-hook时会运行fundamental-mode,但缓冲区会以该模式启动,因此不会运行此挂钩。
  • 似乎没有办法挂钩get-buffer-create

我知道对于这个特定的例子,我总是可以advise函数get-buffer-create,但我尽量避免这种情况。

任何提示?

2 个答案:

答案 0 :(得分:2)

您可能最好从另一方面查看问题,并且只在要查看尾随空格的那些模式中设置var。

但我认为你有一个好处:这些shell输出缓冲区不应该使用fundamental-mode。这可能是M-x report-emacs-bug

的时间

答案 1 :(得分:0)

根据接受的答案,这里有一个代码片段,它只为特定模式启用尾随空格突出显示:

(setq-default show-trailing-whitespace nil)

(defun namespace/show-trailing-whitespace ()
  "Highlight trailing whitespaces in this buffer."
  (setq-local show-trailing-whitespace t))

(dolist (hook '(prog-mode-hook text-mode-hook))
  (add-hook hook 'namespace/show-trailing-whitespace))

这个片段基本上取自Steve Purcell's configuration