commit 2d7ea419646d117e33642c7cf20586296e814996
parent 5b33a4e163aff2dc936bafca6f7df44539013dff
Author: Thomas Frössman <thomasf@jossystem.se>
Date: Sun, 3 Nov 2019 15:51:20 +0100
add some functions for interactive testing/editing of themes
Some of these maybe could be moved into solarized-theme-utils but not now.
Diffstat:
2 files changed, 187 insertions(+), 33 deletions(-)
diff --git a/Makefile b/Makefile
@@ -30,5 +30,11 @@ clean:
# test: elpa
# $(CASK) exec buttercup -L .
+run:
+ $(CASK) exec emacs -q -l ./minimal-init/init.el ${ARGS}
+
test: elpa
- $(CASK) exec emacs -q -l ./minimal-init/init.el
+ $(MAKE) run
+
+dev: clean elpa
+ $(MAKE) ARGS="minimal-init/test-files/* minimal-init/init.el *-theme.el solarized.el" run
diff --git a/minimal-init/init.el b/minimal-init/init.el
@@ -1,16 +1,152 @@
-(let* ((init-dir (file-name-as-directory (file-name-directory load-file-name)))
- (elisp-dir (expand-file-name ".." init-dir))
- (childtheme-dir (expand-file-name "../child-theme-example" init-dir))
- (childtheme-themes-dir (expand-file-name "themes" childtheme-dir))
- )
+;; this init file is primarily focused around developing and
+;; evaluating theming outside of ones own emacs.d.
+(setq pop-up-frame-function nil
+ inhibit-startup-screen t
+ initial-scratch-message nil
+ make-backup-files nil
+ auto-save-default nil
+ create-lockfiles nil
+ display-buffer-alist
+ '((".*" (display-buffer-reuse-window
+ display-buffer-same-window)))
+ enable-local-variables nil)
- (add-to-list 'load-path elisp-dir)
- (add-to-list 'load-path childtheme-dir)
- (setq custom-theme-load-path (list elisp-dir childtheme-themes-dir)
- package-user-dir (expand-file-name "elpa" init-dir)
- package-archives '(("gnu" . "https://elpa.gnu.org/packages/") ("melpa" . "https://melpa.org/packages/"))))
+(require 'subr-x)
-(setq safe-local-variable-values '((eval when (fboundp 'rainbow-mode) (rainbow-mode 1))))
+(defun dev-debug-make-frame ()
+ ;; debug-on-entry on make-frame does not work
+ (define-advice make-frame (:around (fn &rest args) suppress)
+ "Suppress making new frame; return existing frame."
+ (debug)
+ (message "make-frame suppressed; proceed at your own peril.")
+ (selected-frame)))
+;; (debug-make-frame)
+
+
+(when load-file-name
+ (let* ((init-dir (file-name-as-directory (file-name-directory load-file-name)))
+ (elisp-dir (expand-file-name ".." init-dir))
+ (childtheme-dir (expand-file-name "../child-theme-example" init-dir))
+ (childtheme-themes-dir (expand-file-name "themes" childtheme-dir)))
+
+ (defvar dev-project-root elisp-dir)
+
+ (add-to-list 'load-path elisp-dir)
+ (add-to-list 'load-path childtheme-dir)
+ (setq custom-theme-load-path (list elisp-dir childtheme-themes-dir)
+ package-user-dir (expand-file-name "elpa" init-dir)
+ package-archives '(("gnu" . "https://elpa.gnu.org/packages/")
+ ("melpa" . "https://melpa.org/packages/")))))
+
+
+(defun dev-themes ()
+ "get list of all themes"
+ (let ((themes nil))
+ (setq themes (custom-available-themes))
+ (setq themes (remove 'solarized themes))
+ ;;(setq themes (cl-sort themes 'string-lessp :key '(lambda (v) (downcase (symbol-name v)))))
+ themes))
+
+(defun dev-cycle-themes (&optional themes)
+ (interactive)
+ (let* ((themes (or themes (dev-themes)))
+ (current-theme-candidate (and custom-enabled-themes (car custom-enabled-themes)))
+ (current-theme (if (member current-theme-candidate themes)
+ current-theme-candidate
+ (car themes)))
+ (next-theme (if (not current-theme)
+ dev-default-theme
+ (nth (mod (+ 1 (seq-position themes current-theme))
+ (length themes))
+ themes))))
+ (dev-disable-all-themes)
+ (message "loading theme: %s" next-theme)
+ (load-theme next-theme t)))
+(global-set-key (kbd "<f7>") 'dev-cycle-themes)
+
+(defun dev-cycle-main-themes ()
+ (interactive)
+ (dev-cycle-themes '(solarized-dark solarized-light)))
+
+(global-set-key (kbd "<f6>") 'dev-cycle-main-themes)
+(global-set-key (kbd "<f8>") 'load-theme)
+
+(defun dev-disable-all-themes()
+ (interactive)
+ (dolist (v custom-enabled-themes)
+ (disable-theme v)))
+(global-set-key (kbd "<f4>") 'dev-disable-all-themes)
+
+(defun dev-reload-theme()
+ (interactive)
+ (dev-save-elisp-buffers)
+ (load "solarized")
+ (let ((themes custom-enabled-themes))
+ (dev-disable-all-themes)
+ (dolist (v themes)
+ (load-theme v t))))
+(global-set-key (kbd "<f5>") 'dev-reload-theme)
+
+(defun dev-save-elisp-buffers ()
+ (interactive)
+ (save-some-buffers 'no-confirm
+ (lambda ()
+ (and buffer-file-name
+ (eq major-mode 'emacs-lisp-mode)
+ (string-prefix-p dev-project-root buffer-file-name)))))
+
+(defun dev-switch-buffer-solarized ()
+ (interactive)
+ (switch-to-buffer (get-buffer "solarized.el")))
+(global-set-key (kbd "<f9>") ' dev-switch-buffer-solarized)
+
+(defun dev-switch-buffer-current-theme ()
+ (interactive)
+ (dolist
+ (p custom-theme-load-path)
+ (let* (
+ (current-theme (and custom-enabled-themes (car custom-enabled-themes)))
+ (current-theme-filename (expand-file-name (concat (symbol-name current-theme) "-theme.el") p)))
+ (if (file-exists-p current-theme-filename)
+ (find-file current-theme-filename)))))
+(global-set-key (kbd "<f10>") 'dev-switch-buffer-current-theme)
+
+(defvar dev-tf-current-buffer nil)
+(defun dev-tf-switch-buffer (&optional backwards)
+ (let* ((cur (current-buffer))
+ (all (seq-filter '(lambda (b)
+ (let ((filen (buffer-file-name b)))
+ (and
+ filen
+ (string-suffix-p "/test-files/" (file-name-directory filen)))))
+ (buffer-list)))
+
+ (all-len (length all))
+ (all-sorted (cl-sort all 'string-lessp :key '(lambda (b) (downcase (buffer-file-name b)))))
+ (cur-idx-pos (seq-position all-sorted cur))
+ (next-idx-pos (cond
+ ((not cur-idx-pos) 0)
+ ((and backwards (= cur-idx-pos 0) ) (- all-len 1))
+ ((and (not backwards) (= cur-idx-pos (- all-len 1))) 0)
+ (t (+ cur-idx-pos (if backwards -1 1)))))
+ (next-buf (if (and (not cur-idx-pos)
+ (bufferp dev-tf-current-buffer)
+ (buffer-live-p dev-tf-current-buffer))
+ dev-tf-current-buffer
+ (elt all-sorted next-idx-pos))))
+
+ (setq dev-tf-current-buffer next-buf)
+ (switch-to-buffer next-buf)))
+
+(defun dev-tf-switch-buffer-next ()
+ (interactive)
+ (dev-tf-switch-buffer))
+(global-set-key (kbd "<f11>") 'dev-tf-switch-buffer-next)
+
+(defun dev-tf-switch-buffer-prev ()
+ (interactive)
+ (dev-tf-switch-buffer t))
+(global-set-key (kbd "<f12>") 'dev-tf-switch-buffer-prev)
(setq
solarized-distinct-fringe-background nil
@@ -27,7 +163,8 @@
solarized-height-plus-4 1.3
solarized-scale-org-headlines t
solarized-scale-outline-headlines t
-)
+ ;; end
+ )
(require 'package)
(package-initialize)
@@ -36,19 +173,33 @@
(if (package-installed-p package min-version)
t
(if (or (assoc package package-archive-contents) no-refresh)
- (package-install package)
+ (package-install package)
(progn
- (package-refresh-contents)
- (require-package package min-version t)))))
+ (package-refresh-contents)
+ (require-package package min-version t)))))
+
(mapc 'require-package
- '(dash flx-ido projectile web-mode haskell-mode go-mode js2-mode markdown-mode magit smartparens))
+ '(;; required by solarized
+ dash
+ ;; utility/convinience
+ flx-ido projectile
+ ;; utility/convinience + face testing
+ magit smartparens
+ ;; editor major modes for face testing
+ web-mode haskell-mode go-mode js2-mode markdown-mode rust-mode))
-(smartparens-global-mode)
-(show-smartparens-global-mode)
+(when load-file-name
+ (smartparens-global-mode)
+ (show-smartparens-global-mode)
+ (smartparens-global-strict-mode)
+ (ido-mode 1)
+ (ido-everywhere 1)
+ (flx-ido-mode 1)
+ (projectile-global-mode)
+ (global-set-key (kbd "C-h h") 'ibuffer)
+ (global-set-key (kbd "C-h g") 'magit))
-(global-set-key (kbd "C-h h") 'ibuffer)
-(global-set-key (kbd "C-h g") 'magit)
(setq
projectile-sort-order 'recently-active
@@ -56,15 +207,12 @@
projectile-switch-project-action 'projectile-dired
projectile-verbose nil)
-(ido-mode 1)
-(ido-everywhere 1)
-(flx-ido-mode 1)
-
-(projectile-global-mode)
-
-(require 'solarized)
-
-(load-theme 'my-solarized-dark t)
-(load-theme 'my-solarized-light t)
-(load-theme 'solarized-dark t)
-(load-theme 'solarized-light t)
+(when load-file-name
+ (dev-disable-all-themes)
+ (load-theme 'my-solarized-dark t)
+ (dev-disable-all-themes)
+ (load-theme 'my-solarized-light t)
+ (dev-disable-all-themes)
+ (load-theme 'solarized-dark t)
+ (dev-disable-all-themes)
+ (load-theme 'solarized-light t))