Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Emacs Auto Load Color Theme by Time

Tags:

emacs

elisp

Can I let Emacs automatically load theme ? or do certain command at customized time ? Say what I want is to M-x load-theme RET solarized-light when I am at office at 9:00am and M-x laod-theme RET solarized-dark when I am back home and continued on emacs at 8:00pm.

like image 629
liuminzhao Avatar asked Dec 01 '25 22:12

liuminzhao


2 Answers

To expand on @Anton Kovalenko's answer, you can get the current time using the current-time-string elisp function and extracting the current time of day in hours.

If you want to write a full implementation, you could do something like (Warning, not debugged):

;; <Color theme initialization code>
(setq current-theme '(color-theme-solarized-light))

(defun synchronize-theme ()
    (setq hour 
        (string-to-number 
            (substring (current-time-string) 11 13)))
    (if (member hour (number-sequence 6 17))
        (setq now '(color-theme-solarized-light))
        (setq now '(color-theme-solarized-dark))) 
    (if (equal now current-theme)
        nil
        (setq current-theme now)
        (eval now) ) ) ;; end of (defun ...

(run-with-timer 0 3600 synchronize-theme)

For more info on the functions used, see the following sections of the emacs manual:

  • Time of day
  • Strings
  • String Conversions
  • Idle Timers
  • Contains
  • Number Sequence
like image 84
Dan Avatar answered Dec 05 '25 01:12

Dan


Another (very elegant) solution is theme-changer.

Given a location and day/night color themes, this file provides a change-theme function that selects the appropriate theme based on whether it is day or night. It will continue to change themes at sunrise and sunset. To install:

Set the location:

(setq calendar-location-name "Dallas, TX") 
(setq calendar-latitude 32.85)
(setq calendar-longitude -96.85)

Specify the day and night themes:

(require 'theme-changer)
(change-theme 'tango 'tango-dark)

The project is hosted on Github, and can be installed through melpa.

like image 29
Alexander Poslavsky Avatar answered Dec 05 '25 01:12

Alexander Poslavsky



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!