diff options
-rw-r--r-- | init.org | 147 | ||||
-rw-r--r-- | lib/eos/jao-tracking.el | 124 |
2 files changed, 140 insertions, 131 deletions
@@ -683,139 +683,24 @@ (defvar jao-notify-audio-icon (jao-data-file "music-player-icon.png")) #+end_src *** tracking -***** Package - #+begin_src emacs-lisp - (use-package tracking - :demand t - :init (setq tracking-position 'before-modes - tracking-frame-behavior nil - tracking-most-recent-first nil - tracking-max-mode-line-entries 10 - tracking-sort-faces-first t - tracking-shorten-modes '()) - :config - (setq erc-track-enable-keybindings nil) - - (defun jao-tracking-next-buffer () - (interactive) - (tracking-next-buffer) - (jao-minibuffer-refresh)) - - :bind (("C-c C-SPC" . jao-tracking-next-buffer))) - - (defun jao-tracking-faces (&rest faces) - (dolist (face faces) - (add-to-list 'tracking-faces-priorities face))) - #+end_src -***** Shorten - #+begin_src emacs-lisp - (require 'shorten) - - (defun jao-shorten-modes (&rest modes) - (dolist (m modes) (add-to-list 'tracking-shorten-modes m))) - - (defun jao-tracking--clean-slack (s) - (let ((s (replace-regexp-in-string - "^\\*Slack - .*? : \\(mpdm-\\)?\\([^ ]+\\)\\( \\(T\\)\\)?.*" - "#\\2\\4" - s))) - (replace-regexp-in-string "^[^a-zA-Z#]+" "#" s))) - - (defun jao-tracking-shorten-aggressively (lst tail-count) - (let* ((s (shorten-join-sans-tail lst tail-count))) - (if (string-match-p "^#" s) (substring s 1 nil) s))) - - (defun jao-tracking-split-clean (s) - (shorten-split (jao-tracking--clean-slack s))) - - (defun jao-tracking-shorten (old-func &rest args) - (let ((shorten-join-function #'jao-tracking-shorten-aggressively) - (shorten-split-function #'jao-tracking-split-clean)) - (apply old-func args))) - - (advice-add #'tracking-shorten :around #'jao-tracking-shorten) - #+end_src -***** Minibuffer / proplog - #+begin_src emacs-lisp - (defvar jao-tracking-string "") - - (setq jao-tracking-bkg - (if (jao-colors-scheme-dark-p) "grey20" "grey93")) - - (defface jao-tracking-minibuffer `((t :background ,jao-tracking-bkg)) "") - (defface jao-tracking-minibuffer-sep - `((t :foreground ,jao-tracking-bkg :background ,jao-tracking-bkg)) "") - - (defun jao-tracking-set-log (v) - (when (member window-system '(x)) - (x-change-window-property "_EMACS_LOG" v nil nil nil nil 0))) - - (jao-tracking-set-log "") - - (defun jao-tracking--buffer-str (s) - (if (listp s) - `(:propertize ,(plist-get s :propertize) - face - (jao-tracking-minibuffer - ,@(when-let ((f (plist-get s 'face))) - (jao-tracking-set-log " * ") - (list f)))) - `(:propertize "|" face jao-tracking-minibuffer-sep))) - - (defun jao-tracking-build-str (new-val) - (jao-tracking-set-log "") - (if (listp new-val) - (mapcar #'jao-tracking--buffer-str new-val) - new-val)) - - (defun jao-tracking-echo (sym new-val op where) - (setq jao-tracking-string (jao-tracking-build-str new-val)) - (jao-minibuffer-refresh)) - - (jao-minibuffer-add-variable 'jao-tracking-string -10) - (add-variable-watcher 'tracking-mode-line-buffers #'jao-tracking-echo) - ;; since we're using the minibuffer, forget the mode line - (advice-add #'tracking-mode :override - (lambda (&optional _) (interactive))) - #+end_src -***** Additional highlighting - #+begin_src emacs-lisp - (defvar jao-tracking-highlight-rx "$^") - - (defun jao-tracking-add-buffer (old-func &rest args) - (let* ((buffer (car args)) - (faces (if (and buffer - (string-match-p jao-tracking-highlight-rx - (buffer-name buffer))) - (cons 'lui-highlight-face (cadr args)) - (cadr args)))) - (funcall old-func buffer faces))) - - (advice-add #'tracking-add-buffer :around #'jao-tracking-add-buffer) - (jao-tracking-faces 'lui-highlight-face) - #+end_src -*** notification server #+begin_src emacs-lisp - (use-package ednc - :ensure t - :diminish) - - (use-package jao-ednc - :after ednc - :commands (jao-ednc-setup) + (use-package tracking + :demand t + :init (setq tracking-position 'before-modes + tracking-frame-behavior nil + tracking-most-recent-first nil + tracking-max-mode-line-entries 10 + tracking-sort-faces-first t + tracking-shorten-modes '()) :config - (defhydra jao-hydra-ednc (:color blue) - "Notifications" - ("s" jao-ednc-show "show last") - ("d" jao-ednc-dismiss "dismiss last") - ("D" jao-ednc-dismiss-all "dismiss all") - ("i" jao-ednc-invoke-last-action "invoke last action") - ("n" jao-ednc-pop "show all")) - (jao-ednc-ignore-app "Spotify") - (jao-ednc-ignore-app "NetworkManager") - :bind (("s-n" . jao-hydra-ednc/body) - ("H-s-n" . jao-hydra-ednc/body))) - #+end_src + (setq erc-track-enable-keybindings nil) + :bind (("C-c C-SPC" . tracking-next-buffer))) + + (use-package jao-minibuffer-tracking + :demand t + :init (setq jao-tracking-bkg + (if (jao-colors-scheme-dark-p) "grey20" "grey93"))) + #+end_src * Calendar, diary, weather *** Diary #+BEGIN_SRC emacs-lisp diff --git a/lib/eos/jao-tracking.el b/lib/eos/jao-tracking.el new file mode 100644 index 0000000..1397791 --- /dev/null +++ b/lib/eos/jao-tracking.el @@ -0,0 +1,124 @@ +;;; jao-minibuffer-tracking.el --- Tracking notifications in minibuffer -*- lexical-binding: t; -*- + +;; Copyright (C) 2021 jao + +;; Author: jao <mail@jao.io> +;; Keywords: convenience + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see <https://www.gnu.org/licenses/>. + +;;; Code: + +(require 'tracking) +(require 'shorten) +(require 'jao-minibuffer) + + +;; shorten +(defun jao-shorten-modes (&rest modes) + (dolist (m modes) (add-to-list 'tracking-shorten-modes m))) + +(defun jao-tracking--clean-slack (s) + (let ((s (replace-regexp-in-string + "^\\*Slack - .*? : \\(mpdm-\\)?\\([^ ]+\\)\\( \\(T\\)\\)?.*" + "#\\2\\4" + s))) + (replace-regexp-in-string "^[^a-zA-Z#]+" "#" s))) + +(defun jao-tracking-shorten-aggressively (lst tail-count) + (let* ((s (shorten-join-sans-tail lst tail-count))) + (if (string-match-p "^#" s) (substring s 1 nil) s))) + +(defun jao-tracking-split-clean (s) + (shorten-split (jao-tracking--clean-slack s))) + +(defun jao-tracking-shorten (old-func &rest args) + (let ((shorten-join-function #'jao-tracking-shorten-aggressively) + (shorten-split-function #'jao-tracking-split-clean)) + (apply old-func args))) + +(advice-add #'tracking-shorten :around #'jao-tracking-shorten) + + +;; additional highlighting +(defvar jao-tracking-highlight-rx "$^") + +(defun jao-tracking-faces (&rest faces) + (dolist (face faces) + (add-to-list 'tracking-faces-priorities face))) + +(defun jao-tracking-add-buffer (old-func &rest args) + (let* ((buffer (car args)) + (faces (if (and buffer + (string-match-p jao-tracking-highlight-rx + (buffer-name buffer))) + (cons 'lui-highlight-face (cadr args)) + (cadr args)))) + (funcall old-func buffer faces))) + +(advice-add 'tracking-add-buffer :around #'jao-tracking-add-buffer) +(jao-tracking-faces 'lui-highlight-face) + + +;; minibuffer +(defvar jao-tracking-string "") +(defvar jao-tracking-bkg "grey93") + +(defface jao-tracking-minibuffer `((t :background ,jao-tracking-bkg)) "" + :group 'faces) +(defface jao-tracking-minibuffer-sep + `((t :foreground ,jao-tracking-bkg :background ,jao-tracking-bkg)) "" + :group 'faces) + +(defun jao-tracking-set-log (v) + (when (member window-system '(x)) + (x-change-window-property "_EMACS_LOG" v nil nil nil nil 0))) + +(jao-tracking-set-log "") + +(defun jao-tracking--buffer-str (s) + (if (listp s) + `(:propertize ,(plist-get s :propertize) + face + (jao-tracking-minibuffer + ,@(when-let ((f (plist-get s 'face))) + (jao-tracking-set-log " * ") + (list f)))) + `(:propertize "|" face jao-tracking-minibuffer-sep))) + +(defun jao-tracking-build-str (new-val) + (jao-tracking-set-log "") + (if (listp new-val) + (mapcar #'jao-tracking--buffer-str new-val) + new-val)) + +(defun jao-tracking-update-minibuffer (&rest _) + (setq jao-tracking-string (jao-tracking-build-str (tracking-status))) + (jao-minibuffer-refresh)) + +(advice-add 'force-mode-line-update :after #'jao-tracking-update-minibuffer) + +(defun jao-tracking-echo (_sym new-val _op _where) + (setq jao-tracking-string (jao-tracking-build-str new-val)) + (jao-minibuffer-refresh)) + +(jao-minibuffer-add-variable 'jao-tracking-string -10) + +;; (add-variable-watcher 'tracking-mode-line-buffers #'jao-tracking-echo) +;; since we're using the minibuffer, forget the mode line + +(advice-add #'tracking-mode :override (lambda (&optional _) (interactive))) + +(provide 'jao-tracking) +;;; jao-minibuffer-tracking.el ends here |