当c模式加载时,我想加载名为"my-c-setup.el“的文件。所以,我用的是"autoload“函数。
在我的python设置中,它工作得很好:
lang.el
(autoload 'python-mode "my-python-setup" "" t)my-python-setup.el
(require 'python)
; ...我试图对c模式做同样的事情,但我不工作:
lang.el
(autoload 'c-mode "my-c-setup" "" t)my-c-setup.el
(setq c-basic-offset 4)
; ...当我试图以c模式(例如test.c)打开一个文件时,我有以下错误:
File mode specification error: (error "Autoloading failed to define function c-mode")发布于 2011-04-23 09:55:56
这不是你要找的东西。它所做的只是在第一次需要的时候加载一些代码,这是扩展Emacs功能的一种方便的方法,同时仍然保持启动时间较短。
为了解决您的问题,我们必须考虑您真正想要做的事情:您只是希望在某个时候加载一些代码,还是希望在c-mode中为永久缓冲区进行缓冲区本地自定义。
如果您只是希望Emacs在启动时加载您的代码,可以将代码直接放入您的.emacs文件中,或者使用load-file或require代替autoload。
load-file只需取一个文件名,加载该文件中的lisp代码并对其进行计算。因此,如果您的代码位于一个名为"/path/to/my-c-setup.el“的文件中,您可以在您的.emacs中放置以下行,并且代码将在每次启动时加载:
(load-file "/path/to/my-c-setup.el")也许您不想为加载的每个文件提供绝对路径名称。在这种情况下,您可以使用函数load-library,它类似于load-file,但是尝试在存储在变量load-path中的任何目录中找到给定的文件名。
(add-to-list 'load-path "/path/to")
(load-library "my-c-setup.el")优点是您只需执行add-to-list部分一次,所有对load-library的后续调用都可以在该目录中找到代码。
另一种方法是提供/要求机制:您可以通过在..el文件中添加一个(provide 'feature)调用来使..el文件“提供”某些特性。
(provide 'my-c-mode-customizations)然后在您的(require 'feature)文件中放置一个符合的.emacs,您的代码也会被加载:
(require 'my-c-mode-customizations)但是,如果只希望在缓冲区中激活c-mode时才加载代码,则实现此目的的方法是通过Emacs的钩子机制:
钩子是一个变量,您可以在其中存储一个或多个函数,以便在特定情况下由现有程序调用。
大多数主要模式都提供了一个可自定义的钩子变量,您可以向其中添加函数,只要主模式被调用,就会调用这些函数。例如,c模式提供c-mode-hook.为了在为缓冲区打开c模式时调用您自己的自定义,将它们放在一个函数中,例如my-c-mode-customizations,并将以下一行添加到您的.emacs文件中:
(add-hook 'c-mode-hook 'my-c-mode-customizations)当然,Emacs仍然需要autoload才能真正找到该函数的定义。
发布于 2011-04-23 09:47:19
lisp的自拍不会在加载文件时调用函数,而是告诉lisp函数是可用的,而给定的文件提供了函数。每当有人调用(尚未定义)函数时,就会加载该文件。
我认为c-mode已经定义好了,因此无法重新注册.
发布于 2011-04-23 09:55:01
https://stackoverflow.com/questions/5763458
复制相似问题