Lisp:创建一个宏来遍历每个文档的创建列表

时间:2012-08-03 20:09:56

标签: emacs latex elisp

假设我想创建一个新文档,并快速循环浏览列表。 如果只是一个“单词”,我认为应该有一般的方法来做到这一点。

例如:

"blue orange red yellow black white"

在创建时,有没有人知道如何循环使用这些项目:

\begin{orange}

...我想按一个键循环浏览此列表,用列表中的下一个项目替换橙色(在相反方向执行此过程并不难)?

我尝试了许多与宏有关的不同想法(将列表放在文档的顶部,并进行了大量的i-search),但这并没有削减它。

我愿意把这个列表放在一个elisp文件中,虽然我不知道如何使用elisp中的那个变量,比如一个LaTeX文档(.tex)。

2 个答案:

答案 0 :(得分:2)

嗯,这可能是可能的,但取决于您愿意花多少精力编写eLisp代码以使其工作。只有一些配置选项是不可能的。我会考虑通过添加新的源来扩展自动完成,例如:

(defvar tex-tag-ac-sources
  '((init . tex-tag-ac-init)
    (requires . 0)
    (candidates . tex-tag-ac-candidates)
    (document . tex-tag-ac-documentation)
    (match . tex-tag-completion-filter)
    (prefix . tex-tag-ac-prefix-matcher)
    (symbol . "s"))
  "The source generator for autocompletion needed for interaction 
with auto-complete")

tex-tag-ac-candidatestex-tag-ac-documentationtex-tag-completion-filtertex-tag-ac-prefix-matcher是自动完成的功能。即当自动完成过程为指定的前缀启动时,将调用init函数一次。它被称为w / o参数。候选者是负责显示已过滤候选者列表的函数,它被称为w / o参数,您将过滤掉过滤函数中的候选者,使用到目前为止收集的前缀和目前的候选者列表调用它。最后,在文件的文本上调用matcher函数,以查看是否需要完成。因此,如果它返回t,则调用init,然后在键入时循环遍历过滤器候选。

虽然这有点涉及......但你肯定可以完成你想要的任何事情。显然,如果源中的那些函数是由您定义的,那么,如果您愿意,可以动态读取完成参数或以某种方式动态生成它们。

啊,您可以通过以下方式将源添加到自动完成:

(auto-complete (list tex-tag-ac-sources))

如果按照每次通话进行,或

(setq ac-sources (list tex-tag-ac-sources <other sources>))

您可以在此处找到更多信息:http://cx4a.org/software/auto-complete/manual.html#Using_Source

答案 1 :(得分:1)

编辑:我将宏转换为函数。

这是我做的一种方式。我创建了一个名为“list.list”的文件,其中保存了我的“列表”。我在那里保存了Beamer的LaTeX模板。我这样插入它们:

Antibes Bergen Berkeley Berlin ..... Antibes

请注意,您应始终将第一个条目放入两次以允许循环。

以下是代码:

(defun cycle-list-word ()
  (interactive)
   (right-word)
   (backward-kill-word 1)
   (find-file "/emacs-24.1/list.list")
   (search-forward (substring-no-properties (car kill-ring)) nil t)
   (right-word)
   (backward-kill-word 1)
   (bury-buffer)
   (yank)
)