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

6
目标:我希望在所有缓冲区中启用“show-trailing-whitespace”,除了一些例外。造成问题的例外是“*Shell Command Output*”和它的姊妹缓冲区“*Async Shell Command*”。
我通常将“show-trailing-whitespace”自定义为“t”。因此,它在所有新缓冲区中都是活动的。
我也希望在某些缓冲区中关闭它,尤其是“*Shell Command Output*”等。这对我而言是一个问题:
  • 输出缓冲区不使用特殊模式;它仍处于“fundamental-mode”中。我无法将此设置钩入“fundamental-mode-hook”中。
  • 当主模式更改为“fundamental-mode”时,会运行“after-major-mode-change-hook”,但缓冲区最初处于该模式,因此不会运行此钩子。
  • 似乎没有一种方法可以将设置钩入“get-buffer-create”中。
我知道我始终可以钩住函数“get-buffer-create”以解决这个问题,但我尽可能避免这样做。
有任何提示吗?
2个回答

2

也许你最好从另一个角度看待这个问题,只在想要查看尾随空格的模式下设置变量。

但我认为你说得很对:这些shell输出缓冲区不应该使用fundamental-mode。现在是时候使用M-x report-emacs-bug了。


我知道,但直到今天那些“其他模式”基本上就是“所有模式”。因此,我更喜欢不必添加无数的钩子。 - Moritz Bunkus
1
prog-mode-hookеТМtext-mode-hookеЇФиѓ•жґµзЫЦе§ІйГ®еИЖињЩдЇЫж®°еЉПгАВ - Stefan
很好的观点,特别是我不知道那个通用的 prog-mode-hook。我想我会走这条路线;绝对比使用 advise 更可取。谢谢。 - Moritz Bunkus

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的配置中提取的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接