X-Git-Url: https://code.delx.au/gnu-emacs-elpa/blobdiff_plain/69843d3c084f3648aa3792f396f5fe076665b41c..ceff01b9e1f5e63a1e64d2b151ec6674d95ec98c:/beacon.el diff --git a/beacon.el b/beacon.el index 54b11e402..bfeeade2d 100644 --- a/beacon.el +++ b/beacon.el @@ -5,7 +5,7 @@ ;; Author: Artur Malabarba ;; URL: https://github.com/Malabarba/beacon ;; Keywords: convenience -;; Version: 0.1.1 +;; Version: 0.2.1 ;; Package-Requires: ((seq "1.9")) ;; This program is free software; you can redistribute it and/or modify @@ -72,6 +72,13 @@ movement distance (in lines) that triggers a beacon blink." "Should the beacon blink when the window changes?" :type 'boolean) +(defcustom beacon-blink-when-focused nil + "Should the beacon blink when Emacs gains focus? +Note that, due to a limitation of `focus-in-hook', this might +trigger false positives on some systems." + :type 'boolean + :package-version '(beacon . "0.2")) + (defcustom beacon-blink-duration 0.3 "Time, in seconds, that the blink should last." :type 'number) @@ -110,7 +117,7 @@ For instance, if you want to disable beacon on buffers where (add-hook 'beacon-dont-blink-predicates #'window-minibuffer-p) -(defcustom beacon-dont-blink-major-modes '(magit-status-mode) +(defcustom beacon-dont-blink-major-modes '(magit-status-mode magit-popup-mode) "A list of major-modes where the beacon won't blink. Whenever the current buffer satisfies `derived-mode-p' for one of the major-modes on this list, the beacon will not @@ -279,10 +286,11 @@ If DELTA is nil, return nil." ;; lines. `count-screen-lines' is too slow if the movement had ;; thousands of lines. (save-excursion - (goto-char (min beacon--previous-place (point))) - (vertical-motion delta) - (> (max (point) beacon--previous-place) - (line-beginning-position))))) + (let ((p (point))) + (goto-char (min beacon--previous-place p)) + (vertical-motion delta) + (> (max p beacon--previous-place) + (line-beginning-position)))))) (defun beacon--maybe-push-mark () "Push mark if it seems to be safe." @@ -333,13 +341,18 @@ unreliable, so just blink immediately." (setq beacon--window-scrolled nil) (beacon-blink))) +(defun beacon--blink-on-focus () + "Blink if `beacon-blink-when-focused' is non-nil" + (when beacon-blink-when-focused + (beacon-blink))) + ;;; Minor-mode (defcustom beacon-lighter (cond - ((char-displayable-p ?💡) " 💡") - ((char-displayable-p ?Λ) " Λ") - (t " *")) + ;; ((char-displayable-p ?💡) " 💡") + ;; ((char-displayable-p ?Λ) " Λ") + (t " (*)")) "Lighter string used on the mode-line." :type 'string) @@ -350,11 +363,17 @@ unreliable, so just blink immediately." (if beacon-mode (progn (add-hook 'window-scroll-functions #'beacon--window-scroll-function) + (add-hook 'focus-in-hook #'beacon--blink-on-focus) (add-hook 'post-command-hook #'beacon--post-command) (add-hook 'pre-command-hook #'beacon--vanish)) + (remove-hook 'focus-in-hook #'beacon--blink-on-focus) (remove-hook 'window-scroll-functions #'beacon--window-scroll-function) (remove-hook 'post-command-hook #'beacon--post-command) (remove-hook 'pre-command-hook #'beacon--vanish))) (provide 'beacon) ;;; beacon.el ends here + +;; Local Variables: +;; indent-tabs-mode: nil +;; End: