emacs: exwm: add smooth-scrolling with C-p and C-n when in zathura
[~bandali/configs] / .emacs.d / init.el
index 847f282..0f080b6 100644 (file)
@@ -582,7 +582,7 @@ For disabling the behaviour for certain buffers and/or modes."
 
 (use-feature exwm-input
   :demand
 
 (use-feature exwm-input
   :demand
-  :after exwm
+  :after exwm-workspace
   :config
   (defun b/exwm-ws-prev-index ()
     "Return the index for the previous EXWM workspace, wrapping
   :config
   (defun b/exwm-ws-prev-index ()
     "Return the index for the previous EXWM workspace, wrapping
@@ -711,6 +711,28 @@ around if needed."
       ;; escape
       ([?\C-g] . [escape]))))
 
       ;; escape
       ([?\C-g] . [escape]))))
 
+(use-feature exwm-manage
+  :demand
+  :after exwm
+  :hook
+  (exwm-manage-finish . (lambda ()
+                          (when exwm-class-name
+                            (cond
+                             ((string= exwm-class-name "Abrowser")
+                              (exwm-input-set-local-simulation-keys
+                               `(,@exwm-input-simulation-keys
+                                 ([?\C-\S-d] . [?\C-d])
+                                 ([?\C-q] . [?\C-w])
+                                 ([?\s-q] . [?\C-q]))))
+                             ((string= exwm-class-name "URxvt")
+                              (exwm-input-set-local-simulation-keys
+                               '(([?\C-c ?\C-c] . [?\C-c])
+                                 ([?\C-c ?\C-u] . [?\C-u]))))
+                             ((string= exwm-class-name "Zathura")
+                              (exwm-input-set-local-simulation-keys
+                               '(([?\C-p] . [C-up])
+                                 ([?\C-n] . [C-down])))))))))
+
 (use-feature exwm-randr
   :demand
   :after exwm
 (use-feature exwm-randr
   :demand
   :after exwm
@@ -1481,7 +1503,8 @@ This function is intended for use with `ivy-ignore-buffers'."
   (load-theme 'tangomod t)
   (sml/apply-theme 'automatic)
   (font-lock-remove-keywords
   (load-theme 'tangomod t)
   (sml/apply-theme 'automatic)
   (font-lock-remove-keywords
-   'org-mode b/org-mode-font-lock-keywords))
+   'org-mode b/org-mode-font-lock-keywords)
+  (exwm-systemtray--refresh))
 
 (defun b/lights-off ()
   "Go dark."
 
 (defun b/lights-off ()
   "Go dark."
@@ -1490,7 +1513,8 @@ This function is intended for use with `ivy-ignore-buffers'."
   (load-theme 'doom-tomorrow-night t)
   (sml/apply-theme 'automatic)
   (font-lock-add-keywords
   (load-theme 'doom-tomorrow-night t)
   (sml/apply-theme 'automatic)
   (font-lock-add-keywords
-   'org-mode b/org-mode-font-lock-keywords t))
+   'org-mode b/org-mode-font-lock-keywords t)
+  (exwm-systemtray--refresh))
 
 (bind-keys
  ("C-c t d" . b/lights-off)
 
 (bind-keys
  ("C-c t d" . b/lights-off)
@@ -1761,11 +1785,9 @@ This function is intended for use with `ivy-ignore-buffers'."
                ("p" . mc/mark-previous-like-this)
                ("a" . mc/mark-all-like-this))))
 
                ("p" . mc/mark-previous-like-this)
                ("a" . mc/mark-all-like-this))))
 
-(comment
-  ;; TODO
-  (use-package forge
-    :after magit
-    :demand))
+(use-package forge
+  :demand
+  :after magit)
 
 (use-package yasnippet
   :defer 0.6
 
 (use-package yasnippet
   :defer 0.6
@@ -1874,6 +1896,23 @@ This function is intended for use with `ivy-ignore-buffers'."
   :demand
   :config (minions-mode))
 
   :demand
   :config (minions-mode))
 
+(use-package dmenu
+  :disabled
+  :custom
+  (dmenu-history-size 0)
+  (dmenu-prompt-string "run: ")
+  (dmenu-save-file (b/var "dmenu-items")))
+
+(use-package eosd
+  ;; TODO: fix build by properly building the eosd-pixbuf.c module
+  ;; e.g. see https://github.com/raxod502/straight.el/issues/386
+  :disabled
+  :straight (:host github :repo "clarete/eosd")
+  :demand
+  :after exwm
+  :config
+  (eosd-start))
+
 \f
 ;;; Email (with Gnus)
 
 \f
 ;;; Email (with Gnus)
 
@@ -2410,80 +2449,7 @@ https://csclub.uwaterloo.ca/~abandali")
   (add-to-list 'erc-modules 'notifications)
   (add-to-list 'erc-modules 'spelling)
   (add-to-list 'erc-modules 'scrolltoplace)
   (add-to-list 'erc-modules 'notifications)
   (add-to-list 'erc-modules 'spelling)
   (add-to-list 'erc-modules 'scrolltoplace)
-  (erc-update-modules)
-
-  (when (and (version<= "24.4" emacs-version)
-             (version<         emacs-version "27"))
-    ;; fix erc-lurker bug
-    ;; patch submitted: https://bugs.gnu.org/36843#10
-    ;; TODO: remove when patch is merged and emacs 27 is released
-    (defvar erc-message-parsed)
-    (defun erc-display-message (parsed type buffer msg &rest args)
-      "Display MSG in BUFFER.
-
-ARGS, PARSED, and TYPE are used to format MSG sensibly.
-
-See also `erc-format-message' and `erc-display-line'."
-      (let ((string (if (symbolp msg)
-                        (apply #'erc-format-message msg args)
-                      msg))
-            (erc-message-parsed parsed))
-        (setq string
-              (cond
-               ((null type)
-                string)
-               ((listp type)
-                (mapc (lambda (type)
-                        (setq string
-                              (erc-display-message-highlight type string)))
-                      type)
-                string)
-               ((symbolp type)
-                (erc-display-message-highlight type string))))
-
-        (if (not (erc-response-p parsed))
-            (erc-display-line string buffer)
-          (unless (erc-hide-current-message-p parsed)
-            (erc-put-text-property 0 (length string) 'erc-parsed parsed string)
-            (erc-put-text-property 0 (length string) 'rear-sticky t string)
-            (when (erc-response.tags parsed)
-              (erc-put-text-property 0 (length string) 'tags (erc-response.tags parsed)
-                                     string))
-            (erc-display-line string buffer)))))
-
-    (defun erc-lurker-update-status (_message)
-      "Update `erc-lurker-state' if necessary.
-
-This function is called from `erc-insert-pre-hook'.  If the
-current message is a PRIVMSG, update `erc-lurker-state' to
-reflect the fact that its sender has issued a PRIVMSG at the
-current time.  Otherwise, take no action.
-
-This function depends on the fact that `erc-display-message'
-lexically binds `erc-message-parsed', which is used to check if
-the current message is a PRIVMSG and to determine its sender.
-See also `erc-lurker-trim-nicks' and `erc-lurker-ignore-chars'.
-
-In order to limit memory consumption, this function also calls
-`erc-lurker-cleanup' once every `erc-lurker-cleanup-interval'
-updates of `erc-lurker-state'."
-      (when (and (boundp 'erc-message-parsed)
-                 (erc-response-p erc-message-parsed))
-        (let* ((command (erc-response.command erc-message-parsed))
-               (sender
-                (erc-lurker-maybe-trim
-                 (car (erc-parse-user (erc-response.sender erc-message-parsed)))))
-               (server
-                (erc-canonicalize-server-name erc-server-announced-name)))
-          (when (equal command "PRIVMSG")
-            (when (>= (cl-incf erc-lurker-cleanup-count)
-                      erc-lurker-cleanup-interval)
-              (setq erc-lurker-cleanup-count 0)
-              (erc-lurker-cleanup))
-            (unless (gethash server erc-lurker-state)
-              (puthash server (make-hash-table :test 'equal) erc-lurker-state))
-            (puthash sender (current-time)
-                     (gethash server erc-lurker-state))))))))
+  (erc-update-modules))
 
 (use-feature erc-fill
   :after erc
 
 (use-feature erc-fill
   :after erc