ui/zen: add +zen/toggle{,-fullscreen} commands

A more reliable "Distraction-free" fullscreen mode.
This commit is contained in:
Henrik Lissner 2021-02-24 15:51:41 -05:00
parent 14d341530a
commit 3e32379f54
4 changed files with 37 additions and 4 deletions

View file

@ -292,7 +292,8 @@
(:when (featurep! :lang org +pomodoro) (:when (featurep! :lang org +pomodoro)
:desc "Pomodoro timer" "t" #'org-pomodoro) :desc "Pomodoro timer" "t" #'org-pomodoro)
(:when (featurep! :ui zen) (:when (featurep! :ui zen)
:desc "Zen mode" "z" #'writeroom-mode)) :desc "Zen mode" "z" #'+zen/toggle
:desc "Zen mode" "z" #'+zen/toggle-fullscreen))
;;; <leader> v --- versioning ;;; <leader> v --- versioning
(:prefix-map ("v" . "versioning") (:prefix-map ("v" . "versioning")

View file

@ -693,7 +693,8 @@
(:when (featurep! :editor word-wrap) (:when (featurep! :editor word-wrap)
:desc "Soft line wrapping" "w" #'+word-wrap-mode) :desc "Soft line wrapping" "w" #'+word-wrap-mode)
(:when (featurep! :ui zen) (:when (featurep! :ui zen)
:desc "Zen mode" "z" #'writeroom-mode))) :desc "Zen mode" "z" #'+zen/toggle
:desc "Zen mode (fullscreen)" "Z" #'+zen/toggle-fullscreen)))
(after! which-key (after! which-key
(let ((prefix-re (regexp-opt (list doom-leader-key doom-leader-alt-key)))) (let ((prefix-re (regexp-opt (list doom-leader-key doom-leader-alt-key))))

View file

@ -0,0 +1,29 @@
;;; ui/zen/autoload.el -*- lexical-binding: t; -*-
;;;###autoload
(defalias '+zen/toggle #'writeroom-mode)
(defvar +zen--last-wconf nil)
;;;###autoload
(defun +zen/toggle-fullscreen ()
"Toggle `writeroom-mode' fullscreen and delete all other windows.
Invoke again to revert to the window configuration before it was activated."
(interactive)
(require 'writeroom-mode)
(let ((writeroom-global-effects +zen--old-writeroom-global-effects)
(writeroom-maximize-window t))
(if writeroom-mode
(progn
(set-frame-parameter
nil 'fullscreen
(let ((fullscreen-restore (frame-parameter nil 'fullscreen-restore)))
(if (memq fullscreen-restore '(maximized fullheight fullwidth))
fullscreen-restore
nil)))
(set-window-configuration +zen--last-wconf))
(setq +zen--last-wconf (current-window-configuration))
(modify-frame-parameters
nil `((fullscreen . fullboth)
(fullscreen-restore . ,(frame-parameter nil 'fullscreen)))))
(let ((writeroom-global-effects (remq 'writeroom-set-fullscreen writeroom-global-effects)))
(call-interactively #'+zen/toggle))))

View file

@ -18,9 +18,11 @@
(after! writeroom-mode (after! writeroom-mode
;; Users should be able to activate writeroom-mode in one buffer (e.g. an org ;; Users should be able to activate writeroom-mode in one buffer (e.g. an org
;; buffer) and code in another. Fullscreening/maximizing will be opt-in. ;; buffer) and code in another. No global behavior should be applied.
;; Fullscreening/maximizing will be opt-in.
(defvar +zen--old-writeroom-global-effects writeroom-global-effects)
(setq writeroom-global-effects nil)
(setq writeroom-maximize-window nil) (setq writeroom-maximize-window nil)
(remove-hook 'writeroom-global-effects #'writeroom-set-fullscreen)
(add-hook! 'writeroom-mode-hook (add-hook! 'writeroom-mode-hook
(defun +zen-enable-text-scaling-mode-h () (defun +zen-enable-text-scaling-mode-h ()