summaryrefslogtreecommitdiffhomepage
path: root/lib/eos/jao-tracking.el
diff options
context:
space:
mode:
Diffstat (limited to 'lib/eos/jao-tracking.el')
-rw-r--r--lib/eos/jao-tracking.el113
1 files changed, 86 insertions, 27 deletions
diff --git a/lib/eos/jao-tracking.el b/lib/eos/jao-tracking.el
index 520116d..2af868c 100644
--- a/lib/eos/jao-tracking.el
+++ b/lib/eos/jao-tracking.el
@@ -1,6 +1,6 @@
-;;; jao-minibuffer-tracking.el --- Tracking notifications in minibuffer -*- lexical-binding: t; -*-
+;; jao-minibuffer-tracking.el --- Tracking notifications -*- lexical-binding: t; -*-
-;; Copyright (C) 2021 jao
+;; Copyright (C) 2021, 2022, 2024 jao
;; Author: jao <mail@jao.io>
;; Keywords: convenience
@@ -18,33 +18,33 @@
;; 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
(require 'tracking)
(require 'shorten)
(require 'jao-minibuffer)
+(require 'jao-afio)
-
-;; shorten
+;;; shorten
+;;;###autoload
(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))
- (s (replace-regexp-in-string "logstash-\\([^-]+\\)-\\(.+\\)"
- "\\2-\\1"
- s)))
- (replace-regexp-in-string "^[^a-zA-Z#]+" "#" s)))
+(defvar jao-tracking-cleaners '(("^[^a-zA-Z#@]+" . "#")))
+
+;;;###autoload
+(defun jao-tracking-cleaner (rx subst)
+ (add-to-list 'jao-tracking-cleaners (cons rx subst)))
(defun jao-tracking-shorten-aggressively (lst tail-count)
- (let* ((s (shorten-join-sans-tail 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)))
+ (dolist (cln jao-tracking-cleaners)
+ (when (string-match (car cln) s)
+ (setq s (replace-match (cdr cln) nil nil s))))
+ (shorten-split s))
(defun jao-tracking-shorten (old-func &rest args)
(let ((shorten-join-function #'jao-tracking-shorten-aggressively)
@@ -53,14 +53,15 @@
(advice-add #'tracking-shorten :around #'jao-tracking-shorten)
-
-;; additional highlighting
+;;; additional highlighting
(defvar jao-tracking-highlight-rx "$^")
+;;;###autoload
(defun jao-tracking-faces (&rest faces)
(dolist (face faces)
(add-to-list 'tracking-faces-priorities face)))
+;;;###autoload
(defun jao-tracking-add-buffer (old-func &rest args)
(let* ((buffer (car args))
(faces (if (and buffer
@@ -73,8 +74,7 @@
(advice-add 'tracking-add-buffer :around #'jao-tracking-add-buffer)
(jao-tracking-faces 'lui-highlight-face)
-
-;; minibuffer
+;;; minibuffer
(defvar jao-tracking-string "")
(defvar jao-tracking-bkg "grey93")
@@ -84,11 +84,21 @@
`((t :foreground ,jao-tracking-bkg :background ,jao-tracking-bkg)) ""
:group 'faces)
+(defvar jao-tracking--pipe
+ (let ((name "/tmp/emacs.status"))
+ (unless (file-exists-p name)
+ (shell-command (format "mkfifo %s" name name)))
+ name))
+
(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 "")
+ (x-change-window-property "_EMACS_LOG" v nil nil nil nil 0))
+ (if jao-wayland-enabled
+ (let ((inhibit-message t))
+ (shell-command (format "echo \"%s\" > %s" v jao-tracking--pipe)))
+ (let* ((action (if (string-blank-p v) "remove" "add"))
+ (cmd (format "wmctrl -r emacs -b %s,demands_attention" action)))
+ (shell-command-to-string cmd))))
(defun jao-tracking--buffer-str (s)
(if (listp s)
@@ -114,10 +124,59 @@
(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)))
+(defvar jao-tracking-use-scratch 5)
+(defvar jao-tracking--start-frame nil)
+
+(defun jao-tracking--remove-visible-buffers ()
+ (unless (and jao-afio-use-frames jao-tracking-use-scratch)
+ (tracking-remove-visible-buffers)))
+
+;;; package setup
+;;;###autoload
+(defun jao-tracking-go-to-chats ()
+ (interactive)
+ (when jao-tracking-use-scratch
+ (jao-afio-goto-nth jao-tracking-use-scratch)))
+
+;;;###autoload
+(defun jao-tracking-next-buffer ()
+ (interactive)
+ (if jao-tracking-use-scratch
+ (let ((k (if (numberp jao-tracking-use-scratch) jao-tracking-use-scratch 0))
+ (n (jao-afio-frame-no)))
+ (unless (eq k n) (setq jao-tracking--start-frame n))
+ (cond (tracking-buffers
+ (let ((bs tracking-buffers))
+ (if (eq k n)
+ (tracking-next-buffer)
+ (jao-afio-goto-nth k)
+ (when (and (car bs) (not (memq (current-buffer) bs)))
+ (pop-to-buffer (car bs)))
+ (tracking-remove-visible-buffers))))
+ (jao-tracking--start-frame
+ (jao-afio-goto-nth jao-tracking--start-frame)
+ (setq jao-tracking--start-frame nil))))
+ (tracking-next-buffer))
+ (jao-tracking-update-minibuffer))
+
+(defun jao-tracking-add-to-minibuffer ()
+ (interactive)
+ (jao-minibuffer-add-variable 'jao-tracking-string -10)
+ (add-variable-watcher 'tracking-mode-line-buffers #'jao-tracking-echo)
+ (advice-add #'tracking-mode :override (lambda (&optional _) (interactive))))
+
+(defun jao-tracking-remove-from-minibuffer ()
+ (interactive)
+ (jao-minibuffer-remove-variable 'jao-tracking-string)
+ (remove-variable-watcher 'tracking-mode-line-buffers #'jao-tracking-echo)
+ (advice-remove #'tracking-mode (lambda (&optional _) (interactive))))
+
+;;;###autoload
+(defun jao-tracking-setup (&optional minibuffer)
+ (when minibuffer (jao-tracking-add-to-minibuffer))
+ (add-hook 'jao-afio-switch-hook #'jao-tracking--remove-visible-buffers)
+ (global-set-key (kbd "C-c C-SPC") #'jao-tracking-next-buffer)
+ (define-key tracking-mode-map (kbd "C-c C-SPC") #'jao-tracking-next-buffer))
(provide 'jao-tracking)
;;; jao-minibuffer-tracking.el ends here