.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))))     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...