【问题标题】:Setting theme by time in emacs lisp在 emacs lisp 中按时间设置主题
【发布时间】:2023-01-14 07:04:53
【问题描述】:

我正在尝试为 Emacs 设置主题,但遇到了一些错误。目前我的代码是:

;; theme
(defun set-theme-time ()
  (let ((light 'modus-operandi)
        (dark 'modus-vivendi))
    (load-theme light t t)
    (load-theme dark t t)
    (run-at-time "8:00" nil
      (lambda (light dark)
         (disable-theme dark)
         (enable-theme light))) 
    (run-at-time "17:00" nil
      (lambda (light dark)
         (disable-theme light)
         (enable-theme dark)))
    (message "Theme Loaded")))
(set-theme-time)

我的配置中的所有内容都会加载,message 会在 *Messages* 缓冲区中打印 Theme Loaded。但是,主题不显示,在加载其他所有内容后,我得到了这个:

Error running timer: (wrong-number-of-arguments (lambda (light dark) (disable-theme dark) (enable-theme light)) 0) [2 times]

我怎样才能解决这个问题?

编辑:这是工作代码:

;; theme
(defun onoff (theme1 theme2)
    (disable-theme theme1)
    (enable-theme theme2))

(defun set-theme-time ()
  (let ((light 'modus-operandi)
        (dark 'modus-vivendi))
    (load-theme light t t)
    (load-theme dark t t)

    (run-at-time "8:00" nil #'onoff dark light)
    (run-at-time "17:00" nil #'onoff light dark)

    (message "Theme Loaded")))

(set-theme-time)

【问题讨论】:

    标签: timer emacs themes


    【解决方案1】:

    目前尚不清楚您为什么使用 lambda 或您期望其参数来自何处。你的意思可能是这样的......?

    (defun set-theme-time ()
      (let ((light 'modus-operandi)
            (dark 'modus-vivendi)
            (offon (lambda (off on) (disable-theme off) (enable-theme on))))
       (load-theme light t t)
       (load-theme dark t t)
        
       (run-at-time "8:00" nil offon dark light)
       (run-at-time "17:00" nil offon light dark)
    
       (message "Theme Loaded")))
    

    不过,这有点笨拙;也许将 offon 作为一个单独定义的命名函数更有意义,您可以通过名称 #'offon 调用它。

    【讨论】:

      猜你喜欢
      • 2012-03-17
      • 2011-11-08
      • 1970-01-01
      • 1970-01-01
      • 2011-12-02
      • 1970-01-01
      • 2012-01-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多