【问题标题】:Emacs Lisp Buffer out of focus function?Emacs Lisp Buffer失焦功能?
【发布时间】:2012-03-21 03:02:36
【问题描述】:

是否有一个 emacs lisp 函数可以让我判断缓冲区是否失焦?

我正在尝试编写一个钩子,在它失去焦点后立即摆脱语义 *possible completion's* 缓冲区。

也可以摆脱*Messages* 缓冲区吗?我还没有找到可以杀死它的函数。

【问题讨论】:

  • 正如 ataylor 所指出的,杀死 *Messages* 不是一个好主意。它是如何给您带来问题的?
  • 我只是想减少缓冲区列表中的混乱情况,当我做一些事情时,我发现它很烦人,当我完成它时它不会关闭缓冲区,当我这样做时完成后,当我在当前帧中并想要切换缓冲区时,它会在完成后立即打开该缓冲区
  • 考虑为M-x bury-buffer 添加一个全局键绑定。请注意q 在许多主要模式(dired、help、info、customize 等)中隐藏了缓冲区。将C-x C-b 重新绑定到ibuffer 而不是默认的list-buffers,然后了解如何过滤和分组列表以防止不需要的缓冲区。对于 dired,您可以在打开文件或目录时使用 a 删除 dired 缓冲区。 (编辑:事实上,我有一个先前的答案,其中更详细地介绍了这些建议:stackoverflow.com/a/3145824/324105

标签: emacs buffer elisp


【解决方案1】:

您可以使用current-buffer 测试缓冲区是否是当前具有焦点的缓冲区。比如测试*scratch*是否有焦点,

(eq 
 (current-buffer) 
 (get-buffer "*scratch*"))

*Messages* 缓冲区是 emacs 的重要组成部分。它是 message 函数的隐含目标,用于记录来自各地的各种信息。您可以像任何其他缓冲区一样杀死*Messages*,但它只会在下次调用message 时重新创建。您可能可以通过重新定义 message 函数来使其静音,但我会质疑这样做的意义。

【讨论】:

    【解决方案2】:

    关于你的第二个问题,也可以摆脱消息缓冲区。如果您正在使用ido-mode(每个人都应该使用它!),您可以使用以下 elisp 从缓冲区列表中隐藏 *Messages* 缓冲区:

    (require 'ido)
    (setq ido-ignore-buffers '("^\*Messages\*"))
    

    【讨论】:

    • "并且每个人都应该使用它" Ido 比默认的完成机制更好。但是,当您必须在大列表长字符串(即缓冲区名称)中进行选择时,任何事情都比 ido 好得多。
    • 不久前我尝试使用任何东西,但发现它太奇怪/侵入/在你的脸上 IIRC。我是 OS X 上的 QuickSilver 重度用户,所以也许我应该再试一次...
    • "^*Messages*" 在这种情况下我们必须使用正则表达式吗?
    【解决方案3】:

    您可以尝试PopWin,它可以让您指定将在特殊窗口中打开的缓冲区。当框架失焦或按下 C-g 时,此窗口会关闭

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多