emacs中faces,group,advice的学习与讨论

在此留贴备忘,以便于下周学习。

哪位朋友若有资料,或简短说明介绍,也请给与帮助。

在此提前谢过!

RT Emacs Lisp Reference Manual

2 个赞

东西也太多了点。大家都看了吗?还是,了解一部分,其他的只是查看?

随用随查呀,你说的face group 什么的都有

不怎么了解 Faces。

至于 Group 估计你指的是 (info "(elisp) Group Definitions"),这是用来组织相关的 defcustom 选项的,随便看个例子就明白了,非常简单,完全可以需要用的时候(比如写新 Package 的时候)再了解:

(defgroup magit-status nil
  "Inspect and manipulate Git repositories."
  :link '(info-link "(magit)Status Buffer")
  :group 'magit-modes)

(defcustom magit-status-mode-hook nil
  "Hook run after entering Magit-Status mode."
  :group 'magit-status
  :type 'hook)

至于 Advice:

  • 学习新的 advice-add/advice-remove 就行了,不用学习旧的 defadvice(info "(elisp) Advising Functions") 中介绍的就是新的;

  • 不用管 add-function / remove-function,一般用 advice-add / advice-remove 就 OK 了;

  • Advice 的位置 :before :around 等,只需(且一定)要搞清楚函数调用的方式即可,不必记忆参数表的写法,比如假设需要 Advice 这样一个函数:

    (defun foo (a) a)
    

    要用 :around 的话,手册 (info "(elisp) Advice combinators") 中提到的函数调用方式:

    (lambda (&rest r) (apply FUNCTION OLDFUN r))
    

    所以你的 Advice 函数的参数表可以是以下任何一种方式:

    (old-fun a)
    (old-fun &rest _)
    (&rest r)
    

    至于用哪一种,看你的喜好;

  • 还可以了解下 Emacs 25.1 加入的 define-advice,它结合了 defun + define-advice

1 个赞

face 字符的外观属性 类似结构体 group 自定义属性的 名字空间 advice 函数的附属修饰函数,或者叫副函数? 上面的 Elisp手册讲的明明白白,英语不好就没办法了,翻译确实不好翻译全靠理解

Group

(defgroup magit-status nil
  "Inspect and manipulate Git repositories."
  :link '(info-link "(magit)Status Buffer")
  :group 'magit-modes)

group的使用,比较简单。下面的理解不知是否正确。

group是全局和buffer之外的另一种作用域,也就是,group中定义的变量若与前两者重名则以group优先,但低于let中的优先级。:group是其重要的关键字,以便指定其所属的父group,最上层应该是xxx-mode。但看了一下代码,:link的作用没看明白,该值应该是存于该group符号对应的属性列表中,以供别的机能查看。

(defcustom magit-status-mode-hook nil
  "Hook run after entering Magit-Status mode."
  :group 'magit-status
  :type 'hook)

defcustom 若指定了:group,则定义的变量的作用域属于该group,未指定的话,就属于当前运行中的buffer。至于:type也是存于该custom符号对应的属性列表中,便于其它机能查看。

Advice

我对其浅显的理解是,就是一个AOP(面向切面编程)。

1 个赞