美文网首页
启动Emacs时根据当地当天日出日落时间切换主题

启动Emacs时根据当地当天日出日落时间切换主题

作者: p1uxtar | 来源:发表于2019-12-20 17:39 被阅读0次

一直想要这样一个功能:根据所在地当天的日出日落时间切换light或dark风格的主题,同时能在阅读文档或网页等其他场景时,以自己的需要手动切换,今天自己实现了!头一回用elisp实现某个功能,喜大普奔……

具体思路是,输入经纬度后,利用sunrise-sunset这一自带函数,得到当天的日出日落时间,跟当前时刻比大小。没有找到该函数以24h制表示时间的方法,所以多加了一层判断:

(defvar dark-theme "Hesperus")
(defvar light-theme "Phosphorus")

(defun switch-theme-based-on-solar (mylat mylon)
  "Switch themes based on the local times of sunrise and sunset."
  (let ((calendar-latitude mylat) (calendar-longitude mylon))
    (let ((sunrise-sunset-list (split-string (sunrise-sunset))))
      (let ((sunrise-time (split-string (nth 1 sunrise-sunset-list) "[:apm]"))
        (sunset-time (split-string (nth 4 sunrise-sunset-list) "[:apm]")))
    (let ((sunrise-num (string-to-number (concat (car sunrise-time) (nth 1 sunrise-time))))
          (sunset-num (string-to-number (concat (car sunset-time) (nth 1 sunset-time)))))
      (if (> (string-to-number (format-time-string "%H")) 12)
          (if (> (string-to-number (format-time-string "%I%M")) (+ sunset-num 10))
          (setq my-current-theme light-theme)
        (setq my-current-theme dark-theme))
        (if (> (string-to-number (format-time-string "%H%M")) (- sunrise-num 10))
        (setq my-current-theme dark-theme)
          (setq my-current-theme light-theme))))))))
(switch-theme-based-on-solar 纬度 经度)

其中switch-theme-based-on-solar()函数里是纬度和经度的数值,西经的话,要用负值,而且注意经纬度不要填反了。

随后需要加一个切换的函数,其他细节请根据自己的需要、酌量添加,实现切换功能的部分如下:

(cond
   ((string-equal my-current-theme "Hesperus")
    (progn
      (disable-theme 'Hesperus)
      (load-theme 'Phosphorus t)
      (setq my-current-theme "Phosphorus")))
   ((string-equal my-current-theme "Phosphorus")
    (progn
      (disable-theme 'Phosphorus)
      (load-theme 'Hesperus t)
      (setq my-current-theme "Hesperus"))))

即,在上一个函数判断时刻之后,若为白天,则先设置当前主题为dark-theme,随后disable之、并启用light-theme,将而重新设置当前主题。这样可以在需要根据场景手动切换主题时,能利用同一个函数。

有更好的思路或代码改进方案,还请留言,谢谢!

相关文章

网友评论

      本文标题:启动Emacs时根据当地当天日出日落时间切换主题

      本文链接:https://www.haomeiwen.com/subject/uopinctx.html