【问题标题】:Make a global minor mode buffer-local使全局次要模式缓冲区本地
【发布时间】:2020-09-16 16:56:42
【问题描述】:

另一个 Elisp 包将次要模式定义为全局。换句话说,包定义了次要模式:

(define-minor-mode some-minor-mode
  ;; ... other stuff ...
  :global t)

我想让它成为缓冲区本地,这样当我激活它时,它只适用于激活它的缓冲区。我该怎么做?

【问题讨论】:

  • @Drew,我认为这只适用于 S.E. 的 [elisp] 标签?在 S.O.,我相信将它用于“用 elisp 编程”问题是有效的。
  • @phils:我认为它也适用于 SO。至少应该(IMO)。应该使用更具体的与编程相关的标签(并在必要时创建)。
  • 在 S.O. 是否有任何其他编程语言标签以这种方式使用? AFAIK 编程语言的标签被广泛用于标记关于编程使用该语言的问题。在 E.S.上下文是已经 Emacs,所以“用elisp编程”总是隐含的,所以[elisp]定义在那里是合理的。我们可以说在 S.O. 中包含一个 [emacs] 标签。提供与 E.S. 相同的上下文,但我不明白为什么 [elisp] 会在 S.O. 中以不同的方式使用。到任何其他语言标签。
  • 至少,有大量的问题没有以这种方式标记,因此不存在一致性。我认为这需要 Meta 讨论和普遍同意。

标签: emacs buffer


【解决方案1】:

你不能。或者至少,你不能以通用的方式。

当次要模式被定义为全局时,模式的逻辑无疑会做出完全相同的假设,并且您无法进行任何通用更改,这会导致 任何任意全局次要模式只有缓冲区局部效果。

此外,对于某些全局模式,缓冲区局部变量甚至有意义,例如影响窗口配置或框架参数的模式。

必须根据具体情况处理全局模式,查看它们的具体实现细节。根据所讨论的代码,您可能能够在某些特定模式下实现您的目标;但不能保证相同的方法适用于所有全局模式。

值得一提的是,有一些“全球化”次要模式融合了其他两个概念,通过采用现有的缓冲区局部次要模式,然后定义一个全局模式来启用或禁用全部缓冲区局部模式适用的缓冲区。但是,您不能朝另一个方向发展——如果您已经没有缓冲区本地模式,那么您必须先编写它。

【讨论】:

    猜你喜欢
    • 2011-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多