.emacs循环将一些次要模式分配给一些主要模式
我想把{whitespace和yas/minor mode}minor mode与一些主要模式挂钩。当然可以手动完成,但我需要一个循环。所以我试着写它:.emacs循环将一些次要模式分配给一些主要模式,emacs,Emacs,我想把{whitespace和yas/minor mode}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 m
(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)))
)
)
这个循环的问题是list的最后一个元素是“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)
)
)
)
打印零:(使用此选项:
(dolist (hook
(list 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))
(add-hook hook (lambda ()
(whitespace-mode 1)
(yas/minor-mode 1))))
(杜利斯特(胡克)
(列出lisp模式钩子rst模式钩子python模式钩子emacs lisp模式钩子文本模式钩子tcl模式钩子c模式钩子fortran模式钩子)
(添加吊钩(λ()
(空白模式1)
(yas/minor mode 1))我可以看出你的代码有几个问题。首先,每次从minor mode列表弹出时,你都会从主模式列表弹出。其次,你引用了你的
(pop)
调用,这意味着你没有将你想要的值传递到(添加钩子)
当循环值为nil时,while循环不会执行其主体,因此第二个代码块不会通过(message)
生成nil
,因为它不会走那么远。nil只是该(progn)
中生成的最终值,是while循环遇到nil时的最终返回值
您可能希望查看Emacs中的交互式调试支持,以便了解如果您的代码没有按预期的方式运行时实际发生的情况。请参阅:M-:
(信息(elisp)调试”)
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))
定义一个命名函数,如
my coding config
,可以在以后决定包含一些新功能(例如包含另一个次要模式)时简化操作因为您只需重新计算一个函数,而不是删除/添加所有这些钩子变量的项,就可以使更改立即生效。谢谢lupin。虽然我仍然犯了smth错误:它给rst、tcl和fortran模式带来了错误-当我删除它们时,emacs告诉我“错误类型参数:symbolp,(语义默认elisp设置)”。太好了。您现在应该“接受”答案。请参阅标题“如何在此处提问”下的常见问题解答