summaryrefslogtreecommitdiff
path: root/lisp/frame.el
diff options
context:
space:
mode:
Diffstat (limited to 'lisp/frame.el')
-rw-r--r--lisp/frame.el37
1 files changed, 12 insertions, 25 deletions
diff --git a/lisp/frame.el b/lisp/frame.el
index 87bf058f7fb..9402c15a56b 100644
--- a/lisp/frame.el
+++ b/lisp/frame.el
@@ -26,7 +26,6 @@
;;; Code:
(eval-when-compile (require 'cl-lib))
-(eval-when-compile (require 'subr-x)) ;For string-trim-right
(cl-defgeneric frame-creation-function (params)
"Method for window-system dependent functions to create a new frame.
@@ -2502,34 +2501,14 @@ command starts, by installing a pre-command hook."
(when (and (> blink-cursor-blinks 0)
(<= (* 2 blink-cursor-blinks) blink-cursor-blinks-done))
(blink-cursor-suspend)
- (add-hook 'post-command-hook #'blink-cursor-check))
- ;; FIXME: Under TTYs, apparently redisplay only obeys internal-show-cursor
- ;; when there is something else to update on the screen. This is arguably
- ;; a bug, but in the meantime we can circumvent it here by causing an
- ;; artificial update which thus "forces" a cursor update.
- (when (null window-system)
- (let* ((message-log-max nil)
- (msg (current-message))
- ;; Construct a dummy temp message different from the current one.
- ;; This message usually flashes by too quickly to be visible, but
- ;; occasionally it can be noticed, so make it "inconspicuous".
- ;; Not too "inconspicuous", tho: just adding or removing a SPC at the
- ;; end doesn't cause an update, for example.
- (dummymsg (concat (if (> (length msg) 40)
- (let ((msg (string-trim-right msg)))
- (if (> (length msg) 2)
- (substring msg 0 -2)
- msg))
- msg) "-")))
- (message "%s" dummymsg)
- (if msg (message "%s" msg) (message nil)))))
+ (add-hook 'post-command-hook 'blink-cursor-check)))
(defun blink-cursor-end ()
"Stop cursor blinking.
This is installed as a pre-command hook by `blink-cursor-start'.
When run, it cancels the timer `blink-cursor-timer' and removes
itself as a pre-command hook."
- (remove-hook 'pre-command-hook #'blink-cursor-end)
+ (remove-hook 'pre-command-hook 'blink-cursor-end)
(internal-show-cursor nil t)
(when blink-cursor-timer
(cancel-timer blink-cursor-timer)
@@ -2548,7 +2527,15 @@ frame receives focus."
(defun blink-cursor--should-blink ()
"Determine whether we should be blinking.
Returns whether we have any focused non-TTY frame."
- blink-cursor-mode)
+ (and blink-cursor-mode
+ (let ((frame-list (frame-list))
+ (any-graphical-focused nil))
+ (while frame-list
+ (let ((frame (pop frame-list)))
+ (when (and (display-graphic-p frame) (frame-focus-state frame))
+ (setf any-graphical-focused t)
+ (setf frame-list nil))))
+ any-graphical-focused)))
(defun blink-cursor-check ()
"Check if cursor blinking shall be restarted.
@@ -2557,7 +2544,7 @@ stopped by `blink-cursor-suspend'. Internally calls
`blink-cursor--should-blink' and returns its result."
(let ((should-blink (blink-cursor--should-blink)))
(when (and should-blink (not blink-cursor-idle-timer))
- (remove-hook 'post-command-hook #'blink-cursor-check)
+ (remove-hook 'post-command-hook 'blink-cursor-check)
(blink-cursor--start-idle-timer))
should-blink))