【问题标题】:Add content to Emacs minibuffer as the user types in it?当用户输入内容时将内容添加到 Emacs 迷你缓冲区?
【发布时间】:2013-05-20 03:04:18
【问题描述】:

我可能在这里走错了路,所以如果我是,请告诉我。我正在尝试构建与Vim's ctrlp 和其他插件使用的用户界面类似的用户界面,从而为用户提供提示,并且当他们键入时,结果会显示在上方 minibuffer 提示行。

我已经让 minibuffer 命令处理部分与 minibuffer-with-setup-hook 和本地 post-command-hook(简单)一起正常工作,并且可以获得我想要显示的结果(现在只需 (message)ing 他们验证)。

如果我想在 minibuffer 提示行上方显示 10 行结果,我应该以某种方式将文本添加到 minibuffer,还是使用一个单独的缓冲区,在命令完成后我将关闭它?任何指向我应该阅读的手册部分内容的指针都在正确的轨道上?

【问题讨论】:

  • 您要实现 helm 吗? github.com/emacs-helm/helm
  • @event_jr helm 是一个巨大的包,所以没有。
  • Helm 正是您所描述的。如果您想以更简单的方式重做它,请查看它是如何实现的。
  • @event_jr 是的,现在正在阅读它的源代码。我的意思是,是的,那种 UI 风格,但我不是在重新发明 Helm。 Helm 非常臃肿。如果它的完成部分在一个单独的项目中,我会使用它,但它都捆绑在一个上帝包中,这非常不吸引人;)
  • @d11wtq 说 Helm 臃肿就像说 Emacs 臃肿一样。 Emacs 有很多包,但您不必使用它们。 Helm 也是如此。它只提供一个界面,您可以在其中显示您想要的任何内容。因此,如果您只想显示文件名匹配项,那么您可以这样做,等等。

标签: emacs elisp minibuffer


【解决方案1】:

“minibuffer”是一个普通的缓冲区,所以你可以通过正常的方式插入/删除文本来修改它。这就是说,在“之前”添加文本基本上意味着修改可能会导致问题的提示。做类似的事情可能会好得多

(let ((ol (make-overlay (point-min) (point-min))))
  (overlay-put ol 'before-string (format "%s\n" myresults)))

【讨论】:

  • 快速玩了一下,感觉叠加层可以很好地完成这项工作,感谢您的建议。
【解决方案2】:

我开始写这个作为评论,但它有点太长了......

TBH,我觉得重量更轻的 helm 有空间。但现实是 helm 已经够好了,而且已经有人写过了。

我和其他任何人(到目前为止)都没有足够的动力去重写它。你所描述的它的“上帝”方面确实没有吸引力。但是可以加载它(尽管它很大,但对于现代计算机来说,这真的不是问题),并可以更改设置使其变得简约。

ido 是一个更简单的替代方案,但 UI 的风格与您描述的不完全一样。

【讨论】:

  • 是的,ido 更苗条,至少可以单独使用(我现在正在与它集成,但只是作为权宜之计)。我很有动力,但正如我所说,我不想简单地重写 helm,我只想在项目中找到并实时快速地模糊搜索手册/适当的搜索。 Helm 也很慢。我有一个非常快的模糊搜索查找表算法。 Helm 使用两个缓冲区,所以我将从它开始。谢谢。
  • 您可以在 Helm 中添加自己的快速模糊匹配算法作为新来源。你根本不必使用 Helm 的算法,你可以只重用接口。这就是 Helm 的意义所在。
  • 我不想使用 Helm,如前所述,谢谢。如果它以一种更易于采用的方式构建,也许,但它是合二为一的。有点像添加对 Ruby on Rails 的依赖以获取数字助手。这不是你处理新项目的方式。
  • @d11wtq 你的模糊搜索是开源的吗?
  • @event_jr 是的,但它仍在进行中 ;) github.com/d11wtq/fiplr/blob/no-ido/fiplr-search-index.el 基于覆盖的想法,当调用 fiplr-completing-read 时,我目前只是实时更新计数匹配了多少个字符串,但速度很快,因为它使用查找表并在每次按键时排除结果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-13
  • 1970-01-01
  • 1970-01-01
  • 2015-08-20
  • 1970-01-01
  • 2023-03-22
相关资源
最近更新 更多