(with-eval-after-load 'time
(setq
display-time-default-load-average nil
- display-time-format " %a %b %-e %-l:%M%P"
+ display-time-format " %a %Y-%m-%d %-l:%M%P"
display-time-mail-icon '(image :type xpm
:file "gnus/gnus-pointer.xpm"
:ascent center)
(run-with-idle-timer 0.1 nil #'require 'battery)
(with-eval-after-load 'battery
- (setq battery-mode-line-format " %p%% %t")
+ (setq battery-mode-line-format " [%p%% %t]")
(display-battery-mode))
+(progn ; display system volume in mode-line
+ (defun b/get-volume-level (&optional mic)
+ "Returns the current system sound volume.
+If MIC is non-nil, it returns the microphone volume instead."
+ (string-to-number
+ (string-trim
+ (shell-command-to-string
+ (mapconcat
+ #'identity
+ `("pamixer" ,(when mic "--default-source") "--get-volume")
+ " ")))))
+
+ (defun b/set-volume-level (level &optional mic)
+ "Set the system sound volume to LEVEL.
+If MIC is non-nil, set the volume level for the microphone
+instead."
+ (let ((v (if mic 'b/volume-level-mic 'b/volume-level)))
+ (eval `(setq ,v ,level))))
+
+ (defun b/get-volume-mute (&optional mic)
+ "Returns t if system sound is currently muted.
+If MIC is non-nil, it instead returns t if the microphone is
+muted."
+ (string=
+ "true"
+ (string-trim
+ (shell-command-to-string
+ (mapconcat
+ #'identity
+ `("pamixer" ,(when mic "--default-source") "--get-mute")
+ " ")))))
+
+ (defun b/set-volume-mute (mute &optional mic)
+ "Set the system sound mutedness to MUTE.
+If MIC is non-nil, set the mutedness for the microphone instead."
+ (let ((v (if mic 'b/volume-mute-mic 'b/volume-mute)))
+ (eval `(setq ,v ,mute))))
+
+ (defvar b/volume-level (b/get-volume-level))
+ (defvar b/volume-mute (b/get-volume-mute))
+ (defvar b/volume-level-mic (b/get-volume-level 'mic))
+ (defvar b/volume-mute-mic (b/get-volume-mute 'mic))
+
+ (setq-default
+ mode-line-format
+ (append
+ mode-line-format
+ '((:eval
+ (format
+ " [%s%%%%%s %s%%%%%s]"
+ (number-to-string b/volume-level)
+ (if b/volume-mute "-" "+")
+ (number-to-string b/volume-level-mic)
+ (if b/volume-mute-mic "-" "+")))))))
+
;; (with-eval-after-load 'fringe
;; ;; smaller fringe
;; (fringe-mode '(3 . 1)))
(run-with-idle-timer 0.5 nil #'require 'winner)
(with-eval-after-load 'winner
- (winner-mode 1))
+ (winner-mode 1)
+ (when (featurep 'exwm)
+ ;; prevent a bad interaction between EXWM and winner-mode, where
+ ;; sometimes closing a window (like closing a terminal after
+ ;; entering a GPG password via pinentry-gnome3's floating window)
+ ;; results in a dead frame somewhere and effectively freezes EXWM.
+ (advice-add
+ 'winner-insert-if-new
+ :around
+ (lambda (orig-fun &rest args)
+ ;; only add the frame if it's live
+ (when (frame-live-p (car args))
+ (apply orig-fun args))))))
(run-with-idle-timer 0.5 nil #'require 'windmove)
(with-eval-after-load 'windmove
(with-eval-after-load 'ediff
(setq ediff-window-setup-function 'ediff-setup-windows-plain
- ediff-split-window-function 'split-window-horizontally)
- (add-hook 'ediff-after-quit-hook-internal #'winner-undo))
+ ediff-split-window-function 'split-window-horizontally))
(with-eval-after-load 'face-remap
(setq