diff options
-rw-r--r-- | attic/misc.org | 129 | ||||
-rw-r--r-- | completion.org | 12 | ||||
-rw-r--r-- | eww.org | 72 | ||||
-rw-r--r-- | exwm.org | 23 | ||||
-rw-r--r-- | init.org | 274 |
5 files changed, 245 insertions, 265 deletions
diff --git a/attic/misc.org b/attic/misc.org index 397bfcb..94f300f 100644 --- a/attic/misc.org +++ b/attic/misc.org @@ -1,6 +1,6 @@ #+title: Miscellaneous config bits that i don't use anymore -* enwc (network monitor) +* enwc #+BEGIN_SRC emacs-lisp (use-package enwc :ensure t @@ -158,3 +158,130 @@ (global-company-mode 1) #+end_src +* rcirc + #+begin_src emacs-lisp :load no + (use-package rcirc + :init + (setq rcirc-server-alist `(("irc.libera.chat" + :encryption tls + :port 6697 + :channels ,jao-irc-channels)) + rcirc-default-user-full-name "http://jao.io/" + rcirc-buffer-maximum-lines 1000 + rcirc-fill-column 82 + rcirc-fill-prefix " " + rcirc-time-format "%H:%M " + rcirc-kill-channel-buffers t + rcirc-response-formats + '(("PRIVMSG" . "(%N) %m") + ("NOTICE" . "-%N- %m") + ("ACTION" . "(... %N %m)") + ("COMMAND" . "%m") + ("ERROR" . "%fw!!! %m") + (t . "%fp*** %fs%n %r %m")) + rcirc-prompt ": " + rcirc-nick-completion-format "%s, " + rcirc-reconnect-delay 120 + rcirc-omit-responses + '("JOIN" "PART" "QUIT" "NICK" "AWAY" "MODE" "KEEPALIVE")) + :config + (let ((fn (jao--get-user/password "libera")) + (btl (jao--get-user/password "bitlbee"))) + (setq rcirc-authinfo + `(("libera" nickserv ,(nth 0 fn) ,(nth 1 fn)) + ("localhost" bitlbee ,(nth 0 btl) ,(nth 1 btl))))) + (jao-shorten-modes 'rcirc-mode) + + (define-minor-mode ncm-mode "" nil + (:eval (format " [%S]" + (length (rcirc-channel-nicks (rcirc-buffer-process) + rcirc-target))))) + + (defun jao-rcirc-track () + (dolist (b rcirc-activity) (tracking-add-buffer b)) + (jao-minibuffer-refresh)) + + (add-hook 'rcirc-update-activity-string-hook #'jao-rcirc-track) + (add-hook 'rcirc-mode-hook #'ncm-mode) + (add-hook 'rcirc-mode-hook #'rcirc-omit-mode) + + :diminish ((rcirc-omit-mode . ""))) + #+end_src +* circe + #+begin_src emacs-lisp + (defvar jao-irc-channels '()) + (use-package circe + :ensure t + :bind (:map circe-channel-mode-map + (("C-c C-a" . lui-track-jump-to-indicator))) + :init + (setq circe-default-realname "https://jao.io" + circe-default-part-message "" + circe-default-quit-message "" + circe-ignore-list nil + circe-server-coding-system '(undecided . undecided) + circe-server-killed-confirmation 'ask-and-kill-all + circe-server-auto-join-default-type :after-auth + circe-format-say "({nick}) {body}" + circe-format-self-say "(jao) {body}" + circe-new-buffer-behavior 'ignore + circe-new-buffer-behavior-ignore-auto-joins t + circe-nickserv-ghost-style 'after-auth + circe-prompt-string ": " + circe-completion-suffix ", " + circe-reduce-lurker-spam t + + circe-nick-next-function + (lambda (old) + (replace-regexp-in-string "-" "`" (circe-nick-next old))) + + circe-lagmon-mode-line-format-string "" ;; "%.0f " + circe-lagmon-mode-line-unknown-lag-string "" ;; "? " + circe-lagmon-timer-tick 120 + circe-lagmon-reconnect-interval 180 + + lui-max-buffer-size 30000 + lui-fill-column 80 + lui-time-stamp-position 'right + lui-time-stamp-format "%H:%M" + lui-flyspell-p nil + + lui-track-indicator 'fringe + lui-track-behavior 'before-tracking-next-buffer) + :config + + (defun circe-command-RECOVER (&rest ignore) + "Recover nick" + (let* ((fn (jao--get-user/password "freenode")) + (u (car fn)) + (p (cadr fn))) + (circe-command-MSG "nickserv" (format "IDENTIFY %s %s" u p)) + (circe-command-MSG "nickserv" (format "GHOST %s" u)) + (circe-command-MSG "nickserv" (format "RELEASE %s" u)) + (circe-command-NICK u))) + + (defvar jao-bitlbee-channels ()) + (setq circe-network-options + (let ((up (jao--get-user/password "freenode")) + (bup (jao--get-user/password "bitlbee"))) + `(("libera" + :host "irc.libera.chat" :port 6667 + :nick ,(car up) :channels ,jao-irc-channels + :tls t :nickserv-password ,(cadr up)) + ("Freenode" :nick ,(car up) :channels ,jao-irc-channels + :tls t :sasl-username ,(car up) :sasl-password ,(cadr up)) + ("Bitlbee" + :host "127.0.0.1" :nick ,(car bup) + :channels ,jao-bitlbee-channels + :lagmon-disabled t + :nickserv-password ,(cadr bup) :user ,(car bup))))) + + (jao-shorten-modes 'circe-channel-mode + 'circe-server-mode + 'circe-query-mode) + + (circe-lagmon-mode) + (enable-circe-color-nicks) + (enable-circe-display-images) + (enable-lui-track)) + #+end_src diff --git a/completion.org b/completion.org index 26d8b46..5c1a050 100644 --- a/completion.org +++ b/completion.org @@ -182,8 +182,7 @@ (eq this-command #'consult-buffer) (string-equal "Web" (jao-afio-current-frame))) (setq unread-command-events - (append unread-command-events - (list jao-consult-www-narrow 32))))) + (append unread-command-events `(,jao-consult-www-narrow 32))))) (add-hook 'minibuffer-setup-hook #'jao-consult-initial-narrow) #+end_src *** narrowing eww buffers @@ -195,7 +194,7 @@ :category 'eww-buffer :hidden t :narrow (cons ?e "eww") - :annotate (lambda (b) (get-text-property 0 'url b)) + :annotate (lambda (c) (get-text-property 0 'url c)) :history 'jao-eww-consult-history :action (lambda (b) (jao-afio--goto-www) @@ -204,9 +203,10 @@ (lambda () (seq-map (lambda (b) (with-current-buffer b - (propertize (jao-eww-buffer-title) - 'buffer b - 'url (jao-eww--current-url)))) + (let ((tl (or (jao-eww-buffer-title) "")) + (url (or (jao-eww--current-url) "<no url>"))) + (propertize (if (string-blank-p tl) url tl) + 'buffer b 'url url)))) (jao-eww-session--list-buffers))))) (add-to-list 'consult-buffer-sources 'jao-eww-buffer-source t) @@ -30,21 +30,6 @@ (mm-shr handle))) (setq mm-text-html-renderer 'jao-eww-html-renderer) #+end_src -* Buffer names - #+begin_src emacs-lisp - (defun jao-eww--title () - (if (eq "" (plist-get eww-data :title)) - (plist-get eww-data :url) - (plist-get eww-data :title))) - - (defun jao-eww--rename-buffer () - (let ((name (truncate-string-to-width (jao-eww--title) 90 nil nil t))) - (rename-buffer (format "*%s # eww*" name) t))) - - (add-hook 'eww-after-render-hook #'jao-eww--rename-buffer) - (advice-add 'eww-back-url :after #'jao-eww--rename-buffer) - (advice-add 'eww-forward-url :after #'jao-eww--rename-buffer) - #+end_src * Opening URLs #+begin_src emacs-lisp (defun jao-eww-browse (arg) @@ -99,63 +84,6 @@ (interactive) (jao-eww-reopen t)) #+end_src -* Visiting links in a page - #+begin_src emacs-lisp - (defun jao-eww-copy-link () - (interactive) - (when-let (lnk (or (car (eww-links-at-point)) (eww-current-url))) - (message "%s" lnk) - (kill-new lnk))) - - (defun jao-eww--at-link () - (and (get-text-property (point) 'shr-url) - (not (get-text-property (point) 'eww-form)))) - - (defun jao-eww--previous-url () - (text-property-search-backward 'shr-url nil nil t)) - - (defun jao-eww--pp-link () - (format "%s @ %s" - (button-label (point)) - (propertize (get-text-property (point) 'shr-url) 'face 'link))) - - (defun jao-eww-visit-url-on-page (&optional arg) - "Visit URL from list of links in the page using completion." - (interactive "P") - (when (derived-mode-p 'eww-mode) - (let ((links)) - (save-excursion - (goto-char (point-max)) - (while (jao-eww--previous-url) - (when (jao-eww--at-link) (push (jao-eww--pp-link) links)))) - (let* ((selection (completing-read "Browse: " links nil t)) - (url (replace-regexp-in-string ".*@ " "" selection))) - (eww url (if arg 4 nil)))))) - - (defun jao-eww-jump-to-url-on-page () - "Jump to URL position in the page using completion." - (interactive) - (when (derived-mode-p 'eww-mode) - (let ((links)) - (save-excursion - (goto-char (point-max)) - (while (jao-eww--previous-url) - (when (jao-eww--at-link) - (push (format "%s ~ %d" (jao-eww--pp-link) (point)) links)))) - (let* ((selection (completing-read "Jump to URL in page: " links nil t)) - (position (replace-regexp-in-string ".*~ " "" selection)) - (point (string-to-number position))) - (goto-char point))))) - - (defun jao-eww--append-html (oldfn &rest args) - (let ((p (apply oldfn args))) - (when (stringp p) - (let ((r (if (string-match-p ".*\\.html$" p) p (concat p ".html")))) - (kill-new (format "[[doc:%s]]" r)) - r)))) - - (advice-add 'eww-make-unique-file-name :around #'jao-eww--append-html) - #+end_src * eww-lnum #+begin_src emacs-lisp (use-package eww-lnum :ensure t) @@ -460,24 +460,22 @@ (("a" jao-vterm-aptitude "aptitude") ("l" jao-exwm-packages "packages") ("s-w" jao-hydra-exwm/body nil)) + "Monitors" + (("p" jao-vterm-htop "htop") + ("x" jao-exwm-xmobar "restart xmobar") + ("X" jao-exwm-kill-xmobar "kill xmobar")) "Network" (("S" jao-ssh "ssh") ("T" telega "telegram rooster") - ;; ("b" jao-exwm-bluetooth "bluetooth") + ("b" jao-exwm-bluetooth "bluetooth") ;; ("m" run-proton-bridge "proton bridge") ;; ("v" jao-exwm-proton-vpn "proton vpn") - ("c" (jao-chats t) "connect chats")) - "Monitors" - (("p" jao-vterm-htop "htop") - ;; ("P" jao-exwm-proced "proced") - ("x" jao-exwm-xmobar "restart xmobar") - ("X" jao-exwm-kill-xmobar "kill xmobar") - ;; ("t" jao-time-echo-times "current time") ) "Chats" - (("t" (jao-buffer-same-mode 'telega-chat-mode) "telgram buffers") - ("s" (jao-buffer-same-mode 'slack-message-buffer-mode) "slack buffers") - ("i" (jao-buffer-same-mode 'rcirc-mode) "irc channels")) + (("c" (jao-chats t) "connect chats") + ("t" (jao-buffer-same-mode 'telega-chat-mode) "telegram") + ("s" (jao-buffer-same-mode 'slack-message-buffer-mode) "slack") + ("i" (jao-buffer-same-mode 'erc-mode) "irc")) "Looks" (;; ("T" jao-toggle-transparency "toggle transparency" ;; :toggle (jao-transparent-p) :color red) @@ -485,8 +483,7 @@ ("W" jao-set-random-wallpaper "set radom wallpaper")) "Helpers" (("r" org-reveal "org reveal") - ("k" jao-kb-toggle "toggle keyboard" - :toggle (jao-kb-toggled-p) :color red) + ("k" jao-kb-toggle "toggle keyboard" :toggle (jao-kb-toggled-p)) ("M" jao-minibuffer-toggle "toggle minibuffer" :toggle jao-minibuffer-enabled-p)))) #+end_src @@ -659,10 +659,7 @@ (setq mode-line-position-column-format '(" %c") mode-line-position-line-format '(" %l,%c")) (setq mode-line-percent-position - '(;; (circe-chat-target (:eval (format " [%d]" - ;; (length (circe-channel-nicks))))) - " %l" - (:eval (format "/%d" (line-number-at-pos (point-max)))))) + '(" %l" (:eval (format "/%d" (line-number-at-pos (point-max)))))) (line-number-mode -1) (column-number-mode 1) (jao-minibuffer-add-mode-line 90) @@ -1609,8 +1606,7 @@ #+end_src *** Web browsers #+begin_src emacs-lisp - ;; (jao-load-org "eww") - (jao-load-org "w3m") + (jao-load-org "eww") #+end_src * Email #+begin_src emacs-lisp @@ -2687,83 +2683,36 @@ (jao-exec-in-vterm (format "ssh %s" h) (format "* %s *" h)))) #+end_src * Chats -*** rcirc - #+begin_src emacs-lisp :load no - (use-package rcirc - :init - (setq rcirc-server-alist `(("irc.libera.chat" - :encryption tls - :port 6697 - :channels ,jao-irc-channels)) - rcirc-default-user-full-name "http://jao.io/" - rcirc-buffer-maximum-lines 1000 - rcirc-fill-column 82 - rcirc-fill-prefix " " - rcirc-time-format "%H:%M " - rcirc-kill-channel-buffers t - rcirc-response-formats - '(("PRIVMSG" . "(%N) %m") - ("NOTICE" . "-%N- %m") - ("ACTION" . "(... %N %m)") - ("COMMAND" . "%m") - ("ERROR" . "%fw!!! %m") - (t . "%fp*** %fs%n %r %m")) - rcirc-prompt ": " - rcirc-nick-completion-format "%s, " - rcirc-reconnect-delay 120 - rcirc-omit-responses - '("JOIN" "PART" "QUIT" "NICK" "AWAY" "MODE" "KEEPALIVE")) - :config - (let ((fn (jao--get-user/password "libera")) - (btl (jao--get-user/password "bitlbee"))) - (setq rcirc-authinfo - `(("libera" nickserv ,(nth 0 fn) ,(nth 1 fn)) - ("localhost" bitlbee ,(nth 0 btl) ,(nth 1 btl))))) - (jao-shorten-modes 'rcirc-mode) - - (define-minor-mode ncm-mode "" nil - (:eval (format " [%S]" - (length (rcirc-channel-nicks (rcirc-buffer-process) - rcirc-target))))) - - (defun jao-rcirc-track () - (dolist (b rcirc-activity) (tracking-add-buffer b)) - (jao-minibuffer-refresh)) - - (add-hook 'rcirc-update-activity-string-hook #'jao-rcirc-track) - (add-hook 'rcirc-mode-hook #'ncm-mode) - (add-hook 'rcirc-mode-hook #'rcirc-omit-mode) - - :diminish ((rcirc-omit-mode . ""))) - #+end_src *** erc ***** Package #+begin_src emacs-lisp (use-package erc :init (setq erc-modules - '(autojoin - button - dcc - fill - irccontrols - match - move-to-prompt - netsplit - networks - noncommands - notify - pcomplete - ring - services - stamp - track - truncate)) + '(autojoin + button + dcc + fill + irccontrols + match + move-to-prompt + netsplit + networks + noncommands + notify + pcomplete + ring + services + stamp + track + truncate)) + (setq erc-auto-query 'bury erc-autojoin-channels-alist `(("libera.chat" ,@jao-irc-channels)) erc-away-nickname "jao" erc-button-buttonize-nicks t - erc-common-server-suffixes '(("freenode.net$" . "fn")) + erc-common-server-suffixes '(("freenode.net$" . "fn") + ("libera.chat$" . "lb")) erc-current-nick-highlight-type 'nick-or-keyword erc-email-userid (car jao-mails) erc-fill-column 84 @@ -2813,95 +2762,87 @@ (require 'erc-services) (add-to-list 'erc-nickserv-alist - (cons 'libera (alist-get 'freenode erc-nickserv-alist))) - - ;; (let ((fn (nth 1 (jao--get-user/password "libera"))) - ;; (btl (nth 1 (jao--get-user/password "bitlbee")))) - ;; (setq erc-nickserv-passwords - ;; `((libera (("jao" . ,fn) ("jaowl" . ,fn))) - ;; (BitlBee (("jao" . ,btl)))))) - ) - - #+end_src + (cons 'libera (alist-get 'freenode erc-nickserv-alist)))) + #+end_src ***** No angles - #+begin_src emacs-lisp - (defun jao-erc--no-angles (old-func &rest args) - (let ((msg (apply old-func args))) - (replace-regexp-in-string "^<\\([^>]+\\)>" "(\\1)" msg))) - - (with-eval-after-load "erc" - (modify-syntax-entry ?\( "." erc-mode-syntax-table) - (modify-syntax-entry ?\) "." erc-mode-syntax-table) - (advice-add 'erc-format-privmessage :around #'jao-erc--no-angles) - (advice-add 'erc-format-my-nick :around #'jao-erc--no-angles)) - #+end_src + #+begin_src emacs-lisp + (defun jao-erc--no-angles (old-func &rest args) + (let ((msg (apply old-func args))) + (replace-regexp-in-string "^<\\([^>]+\\)>" "(\\1)" msg))) + + (with-eval-after-load "erc" + (modify-syntax-entry ?\( "." erc-mode-syntax-table) + (modify-syntax-entry ?\) "." erc-mode-syntax-table) + (advice-add 'erc-format-privmessage :around #'jao-erc--no-angles) + (advice-add 'erc-format-my-nick :around #'jao-erc--no-angles)) + #+end_src ***** Tracking - #+begin_src emacs-lisp - (defun jao-erc-track-shorten (names) - (let ((names (erc-track-shorten-names names))) - (mapcar (lambda (n) (string-remove-prefix "#" n)) names))) - - (setq erc-track-exclude-server-buffer t - erc-track-exclude-types '("NICK" "JOIN" "PART" "QUIT" "MODE" "KICK") - erc-track-remove-disconnected-buffers t - erc-track-shorten-aggressively t ;; 'max - erc-track-shorten-function #'jao-erc-track-shorten - erc-track-switch-direction 'importance - erc-track-visibility nil ;; t all, nil only selected frame - erc-track-position-in-mode-line nil - erc-track-enable-keybindings nil ;; 'ask - erc-track-faces-priority-list '(erc-error-face - erc-current-nick-face - erc-pal-face - erc-direct-msg-face - erc-nick-msg-face - erc-default-face - erc-action-face - erc-notice-face)) - (defun jao-track-erc-buffers () - (dolist (e erc-modified-channels-alist) - (tracking-add-buffer (car e) (list (cddr e))))) - - (with-eval-after-load "erc-track" - (require 'tracking nil t) - (add-hook 'exwm-workspace-switch-hook #'erc-modified-channels-update) - (add-hook 'erc-track-list-changed-hook #'jao-track-erc-buffers)) - - (jao-shorten-modes 'erc-mode) - (jao-tracking-faces 'erc-error-face - 'erc-pal-face - 'erc-current-nick-face - 'erc-direct-msg-face) - #+end_src + #+begin_src emacs-lisp + (defun jao-erc-track-shorten (names) + (let ((names (erc-track-shorten-names names))) + (mapcar (lambda (n) (string-remove-prefix "#" n)) names))) + + (setq erc-track-exclude-server-buffer t + erc-track-exclude-types '("NICK" "JOIN" "PART" "QUIT" "MODE" "KICK") + erc-track-remove-disconnected-buffers t + erc-track-shorten-aggressively t ;; 'max + erc-track-shorten-function #'jao-erc-track-shorten + erc-track-switch-direction 'importance + erc-track-visibility nil ;; t all, nil only selected frame + erc-track-position-in-mode-line nil + erc-track-enable-keybindings nil ;; 'ask + erc-track-faces-priority-list '(erc-error-face + erc-current-nick-face + erc-pal-face + erc-direct-msg-face + erc-nick-msg-face + erc-default-face + erc-action-face + erc-notice-face)) + (defun jao-track-erc-buffers () + (dolist (e erc-modified-channels-alist) + (tracking-add-buffer (car e) (list (cddr e))))) + + (with-eval-after-load "erc-track" + (require 'tracking nil t) + (add-hook 'exwm-workspace-switch-hook #'erc-modified-channels-update) + (add-hook 'erc-track-list-changed-hook #'jao-track-erc-buffers)) + + (jao-shorten-modes 'erc-mode) + (jao-tracking-faces 'erc-error-face + 'erc-pal-face + 'erc-current-nick-face + 'erc-direct-msg-face) + #+end_src ***** Commands (/recover &co.) - #+begin_src emacs-lisp - (defun erc-cmd-RECOVER (&rest ignore) - "Recover nick" - (let ((fn (jao--get-user/password "freenode"))) - (erc-cmd-MSG (format "nickserv IDENTIFY %s %s" (car fn) (cadr fn))) - (erc-cmd-MSG (format "nickserv GHOST %s" (car fn))) - (erc-cmd-MSG (format "nickserv RELEASE %s" (car fn))) - (erc-cmd-NICK (car fn)))) - #+end_src + #+begin_src emacs-lisp + (defun erc-cmd-RECOVER (&rest ignore) + "Recover nick" + (let ((fn (jao--get-user/password "freenode"))) + (erc-cmd-MSG (format "nickserv IDENTIFY %s %s" (car fn) (cadr fn))) + (erc-cmd-MSG (format "nickserv GHOST %s" (car fn))) + (erc-cmd-MSG (format "nickserv RELEASE %s" (car fn))) + (erc-cmd-NICK (car fn)))) + #+end_src ***** Images - #+begin_src emacs-lisp :load no - (use-package erc-image - :ensure t - :after erc - :init (setq erc-image-inline-rescale 'window) - :config - (add-to-list 'erc-modules 'image) - (erc-update-modules)) - #+end_src + #+begin_src emacs-lisp :load no + (use-package erc-image + :ensure t + :after erc + :init (setq erc-image-inline-rescale 'window) + :config + (add-to-list 'erc-modules 'image) + (erc-update-modules)) + #+end_src ***** Startup - #+begin_src emacs-lisp - (defun jao-erc (&optional yes) - (interactive "P") - ;; (when (or yes (y-or-n-p "Connect to bitlbee using ERC? ")) - ;; (erc-select :server "localhost")) - (when (or yes (y-or-n-p "Connect to libera using ERC? ")) - (erc-select :server "irc.libera.chat"))) - #+end_src + #+begin_src emacs-lisp + (defun jao-erc (&optional yes) + (interactive "P") + ;; (when (or yes (y-or-n-p "Connect to bitlbee using ERC? ")) + ;; (erc-select :server "localhost")) + (when (or yes (y-or-n-p "Connect to libera using ERC? ")) + (erc-select :server "irc.libera.chat"))) + #+end_src *** slack [[https://github.com/jackellenberger/emojme#finding-a-slack-token][How to get a token]]: It's easyish! Open and sign into the slack customization page, e.g. https://my.slack.com/customize, right @@ -2914,7 +2855,6 @@ ~slack-conversations-view~ by ~slack-conversations-history~ #+begin_src emacs-lisp - (jao-load-path "emacs-slack") (use-package slack :commands (slack-start) :init @@ -2977,35 +2917,23 @@ #+end_src *** startup #+begin_src emacs-lisp - (defun jao-circe (&optional p) - (interactive "P") - ;; (when (or p (y-or-n-p "Connect to bitlbee using circe? ")) - ;; (circe "Bitlbee")) - (when (or p (y-or-n-p "Connect to freenode using circe? ")) - (circe "Freenode"))) - (defun jao-chats (&optional p) (interactive "P") (when (or p (y-or-n-p "Connect to slack? ")) (slack-start)) (when (or p (y-or-n-p "Connect to telegram? ")) (telega)) - ;; (when (and (not (signel-signal-cli-process)) - ;; (or p (y-or-n-p "Start signel? "))) - ;; (signel-start)) - ;; (jao-circe p) - (rcirc)) + (jao-erc p)) (pretty-hydra-define jao-hydra-chats (global-map "s-q" :color blue :quit-key "q") ("Connect" (("A" (jao-chats t) "all chats -y") ("a" jao-chats "all chats") ("S" slack-start "slack") - ;; ("C" (jao-circe t) "circe -y") + ("e" (jao-erc t) "erc -y") ("s-q" jao-hydra-chats/body nil)) "Go" - (("c" (jao-buffer-same-mode 'circe-channel-mode) "circe buffer") - ("i" (jao-buffer-same-mode 'rcirc) "rcirc buffer") + (("i" (jao-buffer-same-mode 'erc-mode) "irc") ("s" (jao-buffer-same-mode 'slack-message-buffer-mode) "slack buffer") ("t" (jao-buffer-same-mode 'telega-chat-mode) "telega buffer") ("T" telega "telega rooster")))) |