Skip to content

Instantly share code, notes, and snippets.

@LaloHao
Created July 23, 2016 03:14
Show Gist options
  • Save LaloHao/1ef321ea94bbf4a30526bee5eb7a1b00 to your computer and use it in GitHub Desktop.
Save LaloHao/1ef321ea94bbf4a30526bee5eb7a1b00 to your computer and use it in GitHub Desktop.
A mode-line status for stumpwm analogous to emacs' god-mode using command-mode.
;;; god-mode.lisp
(defvar *god-mode-enabled* nil)
(defvar *god-mode-enabled-text* "God")
(defvar *god-mode-disabled-text* "Default")
(defun god-mode ()
"Enables or disables `god-mode' by updating variable `god-mode-enabled'."
(if *god-mode-enabled*
(setf *god-mode-enabled* nil)
(setf *god-mode-enabled* t)))
(defun enable-god-mode (&optional (enable t))
"Modifies `command-mode' hooks to run `god-mode'."
(if enable
(values (remove-hook *COMMAND-MODE-START-HOOK* 'command-mode-start-message)
(remove-hook *COMMAND-MODE-END-HOOK* 'command-mode-end-message)
(add-hook *COMMAND-MODE-START-HOOK* 'god-mode)
(add-hook *COMMAND-MODE-END-HOOK* 'god-mode))
(values (remove-hook *COMMAND-MODE-START-HOOK* 'god-mode)
(remove-hook *COMMAND-MODE-END-HOOK* 'god-mode)
(add-hook *COMMAND-MODE-START-HOOK* 'command-mode-start-message)
(add-hook *COMMAND-MODE-END-HOOK* 'command-mode-end-message))))
(defun disable-god-mode ()
"Return `command-mode' hooks back to normal."
(enable-god-mode nil))
(defmacro god-mode-windows ()
'(list :eval '(if *god-mode-enabled*
"%W"
(slot-value (current-window) 'title))))
(defun fmt-god-mode-status (m1)
(declare (ignore m1))
(if *god-mode-enabled*
*god-mode-enabled-text*
*god-mode-disabled-text*))
(dolist (a '((#\s fmt-god-mode-status)))
(pushnew a *screen-mode-line-formatters* :test 'equal))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment