我想将{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)))
)
)
Run Code Online (Sandbox Code Playgroud)
这个循环的问题是list的最后一个元素是"nil"和(add-hook'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)
)
)
)
Run Code Online (Sandbox Code Playgroud)
打印零:(
好吧,我可以看到你的代码有几个问题.首先,每次从次要模式列表中弹出时,您都会从主要模式列表中弹出.其次,您正在引用您的(pop)呼叫,这意味着您没有传递您想要的值(add-hook).
当循环值为nil时,while循环不会执行其正文,因此您的第二个代码块不会nil通过您生成,(message)因为它不会那么远.nil只是生成的最终值(progn),是遇到nil时while循环的最终返回值.
您可能希望查看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))
Run Code Online (Sandbox Code Playgroud)
my-coding-config如果您决定稍后包含一些新功能(例如包括另一个次要模式),则定义命名函数会简化操作,因为您可以通过重新评估该函数来立即生效更改,而不是删除/添加项目那些钩子变量.
| 归档时间: |
|
| 查看次数: |
290 次 |
| 最近记录: |