做一个不同的完成

时间:2011-08-10 04:43:23

标签: emacs elisp

我正在编写一个使用迷你缓冲区的函数,需要一些不同的完成方式,可能需要删除一些字符。例如:

ar<tab> -> artist:
artist:ba<tab> -> artist:'Johann Sebastian Bach' 
artist:'Johann Sebastian Bach'<tab> -> artist:'Bela Bartók'
artist:'Bela Bartók' and album:<tab> 
etc...

我已经编写了完成函数,它会为当前输入生成可能的字符串列表,但我不能将它与completing-readcompletion-table-dynamic一起使用,因为只有不需要的替代品显示删除。在这种情况下,只有第一步,从 ar 艺术家

为了完成这项工作,我正在考虑将低级(read-from-minibuffer)与自定义键映射一起使用来完成并显示备选方案。有更简单的解决方案吗?如果没有,那么哪些函数可以处理显示并循环通过 Completions 缓冲区?

谢谢!


编辑:最后,我自己动手了。 Here is the code,如果有人感兴趣的话。

2 个答案:

答案 0 :(得分:1)

您可以从Icicles库中受益。它包含许多增强迷你缓冲区完成功能。

答案 1 :(得分:1)

是的,冰柱应该能满足您的需求,IIUC。

我不确定你是如何处理“艺术家”和“专辑”之类的东西,但冰柱可以帮助你。

  1. 您可以按任何顺序匹配完成候选人的部分内容。因此,如果'foo'和'bar'是同一候选人的一部分,那么您可以按任意顺序匹配任何具有两者的候选人。这是“渐进式完成”:您可以继续添加模式以缩小选择范围。模式是AND。您还可以减去与模式匹配的候选项。

  2. 您可以拥有“多次完成”的候选人。它们由可配置字符串分隔的部分组成。您可以匹配任何或所有部分。因此,例如,候选人可能是专辑名称加上艺术家姓名。

  3. 如果您还使用书签+ ,那么您可以标记文件,la delicious.com标记。您无需访问文件来标记它们。标签通常是字符串(如果需要,还包括换行符),但它们也可以具有关联的Lisp值。在这里,您可能拥有每个专辑的文件以及包含说明和各种艺术家的标签相册。然后,您可以通过匹配其名称和/或艺术家的部分来完成查找给定的专辑文件。

  4. 对于所有冰柱完成,您可以使用渐进式完成和补充(#1)。对于进展的每个部分,您可以使用子字符串或正则表达式匹配(甚至各种类型的模糊匹配)。

    一些可能有用的链接: