;;;; ace window (use-package ace-window :ensure t :demand t :init (setq aw-keys '(?a ?s ?d ?f ?g ?h ?j ?k ?l) aw-char-position 'top-left aw-ignore-current nil aw-dispatch-when-more-than 2 aw-leading-char-style 'path aw-display-mode-overlay t aw-scope 'frame) :config (defun jao-ace-consult-buffer-other-window (w) (interactive) (aw-switch-to-window w) (consult-buffer)) (setf (alist-get ?b aw-dispatch-alist) '(jao-ace-consult-buffer-other-window "Consult buffer")) (setf (alist-get ?B aw-dispatch-alist) (alist-get ?u aw-dispatch-alist)) :bind (("M-o" . ace-window) ("M-O" . ace-swap-window) ("C-x 4 t" . ace-swap-window))) ;;;; sway (defun jao-swaymsg (msg) (shell-command (format "swaymsg '%s' >/dev/null" msg))) (defmacro jao-def-swaymsg (name msg) `(defun ,(intern (format "jao-sway-%s" name)) () (interactive) (jao-swaymsg ,msg))) (jao-def-swaymsg firefox "[app_id=firefox] focus") (defvar jao-sway-enabled (and (eq window-system 'pgtk) (not jao-xmonad-enabled))) (defun jao-sway-set-wallpaper (f) (jao-swaymsg (format "output * bg %s fill" f)) (make-symbolic-link f "~/.wallpaper.sway" t)) (defun jao-sway-run-or-focus (cmd &optional ws) (if (jao-shell-running-p "firefox") (jao-swaymsg (format "[app_id=%s] focus" cmd)) (jao-swaymsg (format "workspace %s" (or ws 2))) (start-process-shell-command cmd nil cmd))) (defun jao-sway-run-or-focus-tidal () (interactive) (if (jao-shell-running-p "tidal-hifi") (jao-swaymsg "[app_id=tidal-hifi] scratchpad show") (start-process-shell-command "tidal-hifi" nil "tidal-hifi &") (jao-sway-run-or-focus-tidal))) (defun jao-sway-run-or-focus-firefox () (interactive) (jao-sway-run-or-focus "firefox")) (defun jao-sway-enable () (setq jao-browse-doc-use-emacs-p t) (setq jao-wallpaper-random-wake nil) (jao-trisect) (jao-set-transparency 85) (jao-themes-setup) ;; (display-time-mode 1) (global-set-key (kbd "s-f") #'jao-sway-run-or-focus-firefox) (defalias 'jao-streaming-list #'jao-sway-run-or-focus-tidal) (message "Welcome to sway")) (when jao-sway-enabled (defalias 'x-change-window-property #'ignore) (add-hook 'after-init-hook #'jao-sway-enable)) ;;;; time display (setq display-time-world-list '(("Europe/Paris" "Barcelona") ("America/Los_Angeles" "Los Angeles") ("America/New_York" "New York") ("Europe/London" "London") ("Asia/Calcutta" "Bangalore") ("Asia/Tokyo" "Tokyo"))) (defun jao-time--pdt-hour () (jao-time-at-zone "%H" "America/Los_Angeles")) (defun jao-time--chicago-hour () (jao-time-at-zone "%H" "America/Chicago")) (defun jao-time-at-zone (format zone) (set-time-zone-rule zone) (prog1 (format-time-string format) (set-time-zone-rule nil))) (defun jao-time-echo-la-time () (interactive) (message (jao-time-at-zone "LA %H:%M" "America/Los_Angeles"))) (defun jao-time-echo-times () (interactive) (let ((msg (format "%s (%s)" (format-time-string "%a, %e %B - %H:%M") (jao-time-at-zone "%H:%M" "America/Los_Angeles")))) (jao-notify msg "" (jao-data-file "clock-world-icon.png")))) (defun jao-time-to-epoch (&optional s) "Transform a time string to an epoch integer in milliseconds." (interactive) (let ((s (or s (read-string "Time string: " (thing-at-point 'string))))) (message "%s = %s" s (round (* 1000 (time-to-seconds (parse-time-string s))))))) (defun jao-epoch-to-time (&optional v) "Transform an epoch, given in milliseconds, to a time string." (interactive) (let ((v (or v (read-number "Milliseconds: " (thing-at-point 'number))))) (message "%s = %s" v (format-time-string "%Y-%m-%d %H:%M:%S" (seconds-to-time (/ v 1000.0))))))