如何解决.emacs循环将一些次要模式分配给一些主要模式
| 我想将{whitespace和yas / minor-mode}次要模式挂接到某些主要模式。当然可以手动完成,但是我想要一个循环。所以我试图写它:(progn
(setq modes-to-be-hooked \'(lisp-mode-hook rst-mode-hook python-mode-hook emacs-lisp-mode-hook text-mode-hook tcl-mode-hook c-mode-hook fortran-mode-hook))
(while modes-to-be-hooked
(setq my-hooks \'( yas/minor-mode whitespace-mode ))
(while my-hooks
(add-hook \'(pop modes-to-be-hooked) \'(pop my-hooks)))
)
)
此循环的问题在于,列表的最后一个元素为\“ nil \”,并且
(加钩\'nil \'nil)
给出一个错误。
然后,我尝试使用if逃避nils,但它不起作用:
(progn
(setq mylist \'(a b c))
(while mylist
(progn
(setq temp (pop mylist))
(if temp (message \"%s\" temp) (message \"It\'s nil!\") )
(sleep-for 1)
)
)
)
打印nil :(
解决方法
好吧,我可以看到您的代码有几个问题。首先,每次从次要模式列表中弹出时,都会从主要模式列表中弹出。其次,您引用
(pop)
调用,这意味着您没有将想要的值传递给(add-hook)
。
当循环值为nil时,while循环不会执行其主体,因此您的第二个代码块不会通过(message)
产生nil
,因为它不会走那么远。 nil只是在那个ѭ6produced中产生的最终值,它是while循环遇到nil时的最终返回值。
您可能想查看Emacs中的交互式调试支持,以便弄清楚如果代码不符合您的预期方式,实际发生的情况。看到:
M-:(info \"(elisp) debugging\")
RET
但是,我建议您使用lhui的解决方案,而不要解决现有的问题。
对于其他语法,我使用这种方法:
(defun my-coding-config ()
(whitespace-mode 1)
(yas/minor-mode 1))
(mapc
(lambda (language-mode-hook)
(add-hook language-mode-hook \'my-coding-config))
\'(lisp-mode-hook
rst-mode-hook
python-mode-hook
emacs-lisp-mode-hook
text-mode-hook
tcl-mode-hook
c-mode-hook
fortran-mode-hook))
如果您决定以后再包含一些新功能(例如,包括另一个次要模式),则定义诸如“ 9”之类的命名功能将简化操作,因为您只需重新评估一个功能即可使更改立即生效,而不是删除/添加项至所有这些钩子变量。
, 用这个:
(dolist(挂钩
(列出lisp-mode-hook rst-mode-hook python-mode-hook emacs-lisp-mode-hook文本模式-hook tcl-mode-hook c-mode-hook fortran-mode-hook))
(添加钩子钩(lambda()
(空白模式1)
(是/次模式1))))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。