【问题标题】:How does the following statement is interpreted by emacs下面的语句是如何被 emacs 解释的
【发布时间】:2012-04-18 16:26:50
【问题描述】:

https://stackoverflow.com/a/663636/391104

(defun my-c++-mode-hook ()
  (setq c-basic-offset 4)
  (c-set-offset 'substatement-open 0))
(add-hook 'c++-mode-hook 'my-c++-mode-hook)

根据我的调查,我只需将上面的代码添加到我的 .emacs 中,然后它就可以神奇地工作了。

Q1>defun my-c++-mode-hook () 是什么意思? lisp 中的函数定义?

Q2> 下面这行有什么用?我应该在哪里触发它或者它由emacs自动运行

(add-hook 'c++-mode-hook 'my-c++-mode-hook)

谢谢

【问题讨论】:

  • 这些是基本的 Elisp 结构。我建议您在 Emacs 中查看带有 C-h f 的函数调用附近的文档字符串,例如add-hookdefun等;和变量附近的C-h v,例如c-basic-offset 等。如果您查阅 Emacs Lisp Intro 书也会有所帮助。这也可以在 Emacs 中作为 Info 页面使用。总帐

标签: emacs


【解决方案1】:

Q1:是的,这是一个函数定义(因此是defun)。第二个符号是名称,其后缀为“-hook”,向人类表明它旨在用作钩子。它可以(几乎)任意命名而不改变其行为。空的() 表示该函数没有参数。其他一切都是函数的主体。

Q2:基本上,这会将指向前一个函数的指针添加到启动 c++-mode 时调用的函数列表中。每当您启动一个模式时,Emacs 都会查找该模式挂钩,并运行其中的所有函数。函数定义和 add-hook 行都需要放在你的 .emacs 中,它们会在你启动 emacs 时自动运行。

为了让您了解 elisp,强烈建议您使用介绍。它附带 emacs,可以从信息系统访问:C-h i,然后查找 Elisp 简介。

【讨论】:

    猜你喜欢
    • 2013-08-11
    • 2011-03-20
    • 1970-01-01
    • 2017-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-27
    相关资源
    最近更新 更多