我正在阅读article about well-formatted Git commits,我想知道如何将一些规则应用于Magit日志模式。
似乎同时使用3种主要模式:Magit
,Log
,Edit
。
那么,当我们一起使用这些模式时,如何自动硬包装72个字符?
答案 0 :(得分:8)
在回答原始陈述的问题时,如果你有一个函数要添加到众多钩子变量中,你可以这样做:
(defun my-add-to-multiple-hooks (function hooks)
(mapc (lambda (hook)
(add-hook hook function))
hooks))
(defun my-turn-on-auto-fill ()
(setq fill-column 72)
(turn-on-auto-fill))
(my-add-to-multiple-hooks
'my-turn-on-auto-fill
'(text-mode-hook
magit-log-edit-mode-hook
change-log-mode-hook))
也许不是最好的例子,但是我在编程模式中想要启用的一些常见行为有类似的东西,其中还有很多要列出的内容。
答案 1 :(得分:4)
Emacs缓冲区中只能有一种主要模式(除非您使用something like MMM or MuMaMo)。在您的情况下,一个主要模式是magit-log-edit-mode
,其名称由三个单词组成(“Magit Log Edit”)。您可以随意添加任何钩子:
(defun my-turn-on-auto-fill ()
(setq fill-column 72)
(turn-on-auto-fill))
(add-hook 'magit-log-edit-mode-hook 'my-turn-on-auto-fill)
答案 2 :(得分:4)
Emacs模式具有“基本模式”,即bade模式。例如python-mode
扩展prog-mode
,fundamental-mode
扩展fundamental-mode
。所有模式都延伸python-mode
。因此,要挂钩c-mode
加text-mode
而不是prog-mode
,您可以挂钩{{1}}。
答案 3 :(得分:2)
通常,您可以定义自己的函数,例如my-common-hook
并将其添加到所有主要模式,例如:
(defun my-common-hook ()
... do stuff ...
)
(add-hook 'one-mode-hook 'my-common-hook)
(add-hook 'another-mode-hook 'my-common-hook)
(add-hook 'a-third-mode-hook 'my-common-hook)
答案 4 :(得分:1)
现在看到这个,但这就是我所做的。最终结果是我想要做以下事情:
(hook-up-modes my-lisps 'standard-lisp-environment)
。
为此,我定义了以下defvar
s。
(defvar my-lisps "clojure lisp emacs-lisp cider-repl")
(defun standard-lisp-environment ()
(paredit-mode 1)
(rainbow-delimiters-mode 1)
(eldoc-mode 1))
我想让lisp附加-mode-hook到我使用的lisps所以我有以下内容:
(defun append-suffix (suffix phrases)
"take SUFFIX and append it to each of the PHRASES."
(mapcar #'(lambda (phrase) (concat phrase suffix)) phrases))
这样(“clojure”“lisp”)=> (“clojure-mode-hook”“lisp-mode-hook”)。
现在我们可以很容易地拥有这些,我们需要他们的读者符号,我们很容易从
获得(defun symbols-from-strings (strings)
"Given a list of strings, get their symbol values"
(mapcar #'intern strings))
最后我们在上面发布了类似的表格:
(defun multiple-mode-add-hook (modes hook)
"Given a list of x-mode-hook symbols in MODE, add the HOOK to them."
(mapc (lambda (mode) (add-hook mode hook)) modes))
这些操作都是对它们有意义的类型,字符串列表,符号列表'blah-mode-hook等等。所以现在我们需要一个很好的面向用户的功能,我们可以使用它。
(defun hook-up-modes (strings hook)
(let ((modes (symbols-from-strings
(append-suffix "-mode-hook" (split-string strings)))))
(multiple-mode-add-hook modes hook)))
现在这应该是非常清晰的:我们从空格分隔的字符串列表创建我们的模式并将钩子应用于它。此外,由于我已经定义了一个标准的lisp环境,我的所有lisps行为都相似,如果我愿意,我可以在以后轻松删除钩子。那么实际工作的代码就是超级简单的短语
(hook-up-modes my-lisps 'standard-lisp-environment)
。