emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH] Add idle-cursor-morph.


From: Taylan Ulrich Bayırlı/Kammer
Subject: [PATCH] Add idle-cursor-morph.
Date: Sun, 18 Oct 2015 17:19:56 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/24.5 (gnu/linux)

This is for ELPA.

Admittedly this is pretty hacky, but it has worked for me since ages.

It also has a bug I have no idea how to chase: every once in a blue moon
it will fail to restore the cursor color.  I'm guessing it's probably a
bug in Emacs since the implementation is so simple and restoring the
style works, but don't know really.

>From 64d1d46fd3a393cea8922661bc809012f50da301 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Taylan=20Ulrich=20Bay=C4=B1rl=C4=B1/Kammer?=
 <address@hidden>
Date: Sun, 18 Oct 2015 17:12:12 +0200
Subject: [PATCH] Add idle-cursor-morph.

---
 packages/idle-cursor-morph/idle-cursor-morph.el | 115 ++++++++++++++++++++++++
 1 file changed, 115 insertions(+)
 create mode 100644 packages/idle-cursor-morph/idle-cursor-morph.el

diff --git a/packages/idle-cursor-morph/idle-cursor-morph.el 
b/packages/idle-cursor-morph/idle-cursor-morph.el
new file mode 100644
index 0000000..a1deb5e
--- /dev/null
+++ b/packages/idle-cursor-morph/idle-cursor-morph.el
@@ -0,0 +1,115 @@
+;;; idle-cursor-morph.el --- Morph cursor when idle.
+
+;; Copyright (C) 2015  Free Software Foundation, Inc.
+
+;; Author: Taylan Ulrich B. <address@hidden>
+;; 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 <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; Change the cursor appearance after a certain time of inactivity, so it is
+;; easier to find after a pause or distraction.
+;;
+;; You can configure the parameters via the Customize system.
+
+;;; Code:
+
+(defgroup idle-cursor-morph nil
+  "Morph cursor when idle."
+  :group 'convenience)
+
+(defcustom idle-cursor-timeout 20
+  "Seconds to wait before morphing the cursor.
+
+After setting this, run `idle-cursor-activate' to apply the new
+value."
+  :type 'number
+  :group 'idle-cursor-morph)
+
+(defcustom idle-cursor-color "red"
+  "Color of cursor when idle."
+  :type 'string
+  :group 'idle-cursor-morph)
+
+(defcustom idle-cursor-non-idle-color "white"
+  "Color of cursor when not idle."
+  :type 'string
+  :group 'idle-cursor-morph)
+
+(defcustom idle-cursor-type 'box
+  "Type of cursor when idle."
+  :type '(choice (const t)
+                 (const nil)
+                 (const box)
+                 (cons (const bar) number)
+                 (const hbar)
+                 (cons (const hbar) number))
+  :group 'idle-cursor-morph)
+
+(defcustom idle-cursor-non-idle-type cursor-type
+  "Type of cursor when not idle."
+  :type '(choice (const t)
+                 (const nil)
+                 (const box)
+                 (cons (const bar) number)
+                 (const hbar)
+                 (cons (const hbar) number))
+  :group 'idle-cursor-morph)
+
+(defcustom idle-cursor-blinking (not no-blinking-cursor)
+  "Whether the cursor should blink when idle."
+  :type 'boolean
+  :group 'idle-cursor-morph)
+
+(defcustom idle-cursor-non-idle-blinking (not no-blinking-cursor)
+  "Whether the cursor should blink when not idle.")
+
+(defun idle-cursor-morph ()
+  "Set the cursor color and type to `idle-cursor-color' and
+`idle-cursor-type', respectively."
+  (set-cursor-color idle-cursor-color)
+  (setq-default cursor-type idle-cursor-type)
+  (setq no-blinking-cursor (not idle-cursor-blinking))
+  (add-hook 'post-command-hook 'idle-cursor-restore))
+
+(defun idle-cursor-restore ()
+  "Restore the cursor color and type to the values they had
+before `idle-cursor-morph' changed them."
+  (set-cursor-color idle-cursor-non-idle-color)
+  (setq-default cursor-type idle-cursor-non-idle-type)
+  (setq no-blinking-cursor (not idle-cursor-non-idle-blinking))
+  (remove-hook 'post-command-hook 'idle-cursor-restore))
+
+(defvar idle-cursor-morph-timer nil)
+
+(defun idle-cursor-activate ()
+  "Activate the idle-cursor-morphing functionality."
+  (interactive)
+  (if idle-cursor-morph-timer
+      (idle-cursor-deactivate))
+  (setq idle-cursor-morph-timer
+        (run-with-idle-timer idle-cursor-timeout t 'idle-cursor-morph)))
+
+(defun idle-cursor-deactivate ()
+  "Deactivate the idle-cursor-morphing functionality."
+  (interactive)
+  (if idle-cursor-morph-timer
+      (cancel-timer idle-cursor-morph-timer)))
+
+(idle-cursor-activate)
+
+(provide 'idle-cursor-morph)
+;;; idle-cursor-morph.el ends here
-- 
2.5.0


reply via email to

[Prev in Thread] Current Thread [Next in Thread]