* [PATCH] Add idle-cursor-morph.
@ 2015-10-18 15:19 Taylan Ulrich Bayırlı/Kammer
2015-10-18 16:00 ` Drew Adams
2015-10-18 16:17 ` John Wiegley
0 siblings, 2 replies; 5+ messages in thread
From: Taylan Ulrich Bayırlı/Kammer @ 2015-10-18 15:19 UTC (permalink / raw)
To: emacs-devel
[-- Attachment #1: Type: text/plain, Size: 341 bytes --]
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.
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-Add-idle-cursor-morph.patch --]
[-- Type: text/x-diff, Size: 4500 bytes --]
From 64d1d46fd3a393cea8922661bc809012f50da301 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Taylan=20Ulrich=20Bay=C4=B1rl=C4=B1/Kammer?=
<taylanbayirli@gmail.com>
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. <taylanbayirli@gmail.com>
+;; 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
^ permalink raw reply related [flat|nested] 5+ messages in thread
* RE: [PATCH] Add idle-cursor-morph.
2015-10-18 15:19 [PATCH] Add idle-cursor-morph Taylan Ulrich Bayırlı/Kammer
@ 2015-10-18 16:00 ` Drew Adams
2015-10-18 16:39 ` Taylan Ulrich Bayırlı/Kammer
2015-10-18 16:17 ` John Wiegley
1 sibling, 1 reply; 5+ messages in thread
From: Drew Adams @ 2015-10-18 16:00 UTC (permalink / raw)
To: taylanbayirli, emacs-devel
> 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.
FWIW, this has been in my code (in `oneonone.el') since 2006.
(I haven't come across that blue-moon problem, BTW.)
---
(defun 1on1-toggle-box-cursor-when-idle (&optional arg)
"Turn on or off automatically changing to a box cursor when idle.
When on, the cursor is changed to a box whenever Emacs is idle.
With prefix argument, turn on if ARG > 0; else turn off."
(interactive "P")
(setq 1on1-box-cursor-when-idle-p
(if arg
(> (prefix-numeric-value arg) 0)
(not 1on1-box-cursor-when-idle-p)))
(cond (1on1-box-cursor-when-idle-p
(timer-activate-when-idle 1on1-box-cursor-when-idle-timer)
(add-hook 'pre-command-hook '1on1-box-cursor-when-idle-off)
(message "Turned ON making cursor a box when Emacs is idle."))
(t
(cancel-timer 1on1-box-cursor-when-idle-timer)
(remove-hook 'pre-command-hook '1on1-box-cursor-when-idle-off)
(message "Turned OFF making cursor a box when Emacs is idle."))))
(defun 1on1-set-cursor-type (cursor-type)
"Set the cursor type of the selected frame to CURSOR-TYPE.
When called interactively, prompt for the type to use.
To get the frame's current cursor type, use `frame-parameters'."
(interactive
(list (intern (completing-read
"Cursor type: "
(mapcar 'list '("box" "hollow" "bar" "hbar" nil))))))
(modify-frame-parameters (selected-frame)
(list (cons 'cursor-type cursor-type))))
(defun 1on1-box-cursor-when-idle ()
"Change the cursor to a box cursor when Emacs is idle."
(let ((type (cdr (assoc 'cursor-type (frame-parameters)))))
(unless (eq type 'box)
(setq 1on1-last-cursor-type type)
(1on1-set-cursor-type 'box))))
(defun 1on1-box-cursor-when-idle-off ()
"Turn off changing the cursor to a box cursor when Emacs is idle."
(when 1on1-last-cursor-type
(1on1-set-cursor-type 1on1-last-cursor-type)))
(defvar 1on1-box-cursor-when-idle-p t
"Non-nil means to use a box cursor whenever Emacs is idle.
Do NOT change this yourself; instead, use \
`\\[1on1-toggle-box-cursor-when-idle]'.")
(defvar 1on1-box-cursor-when-idle-interval 2
"Number of seconds to wait before changing cursor type to box.
Do NOT change this yourself to change the wait period; instead, use
`\\[1on1-set-box-cursor-when-idle-interval]'.")
(defvar 1on1-box-cursor-when-idle-timer
(progn
(when (boundp '1on1-box-cursor-when-idle-timer)
(cancel-timer 1on1-box-cursor-when-idle-timer))
(run-with-idle-timer 1on1-box-cursor-when-idle-interval t
'1on1-box-cursor-when-idle))
"Timer used to change the cursor to a box cursor when Emacs is idle.")
(cancel-timer 1on1-box-cursor-when-idle-timer)
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] Add idle-cursor-morph.
2015-10-18 15:19 [PATCH] Add idle-cursor-morph Taylan Ulrich Bayırlı/Kammer
2015-10-18 16:00 ` Drew Adams
@ 2015-10-18 16:17 ` John Wiegley
2015-10-19 1:47 ` Drew Adams
1 sibling, 1 reply; 5+ messages in thread
From: John Wiegley @ 2015-10-18 16:17 UTC (permalink / raw)
To: emacs-devel
>>>>> Taylan Ulrich "Bayırlı/Kammer" <taylanbayirli@gmail.com> writes:
> Admittedly this is pretty hacky, but it has worked for me since ages.
Have you seen the module cursor-chg.el, by Drew Adams? It performs a similar
function and has been working well for me for many years.
John
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] Add idle-cursor-morph.
2015-10-18 16:00 ` Drew Adams
@ 2015-10-18 16:39 ` Taylan Ulrich Bayırlı/Kammer
0 siblings, 0 replies; 5+ messages in thread
From: Taylan Ulrich Bayırlı/Kammer @ 2015-10-18 16:39 UTC (permalink / raw)
To: Drew Adams; +Cc: emacs-devel
Drew Adams <drew.adams@oracle.com> writes:
>> 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.
>
> FWIW, this has been in my code (in `oneonone.el') since 2006.
> (I haven't come across that blue-moon problem, BTW.)
>
> [...]
Oh, cool, I'll look into it.
Taylan
^ permalink raw reply [flat|nested] 5+ messages in thread
* RE: [PATCH] Add idle-cursor-morph.
2015-10-18 16:17 ` John Wiegley
@ 2015-10-19 1:47 ` Drew Adams
0 siblings, 0 replies; 5+ messages in thread
From: Drew Adams @ 2015-10-19 1:47 UTC (permalink / raw)
To: John Wiegley, emacs-devel
> Have you seen the module cursor-chg.el, by Drew Adams? It performs
> a similar function and has been working well for me for many years.
That's what I should have mentioned, instead of pointing to the
similar code in oneonone.el. Thanks for the reminder.
I use oneonone.el, and I forgot (!) that I had broken that piece
of it out as a separate library, cursor-chg.el. I could have
just pointed to that instead of inlining the relevant bits of code.
The Commentary of curseor-chg.el says this about that:
;; Note: Library `oneonone.el' provides the same functionality as
;; library `cursor-chg.el', and more. If you use library
;; `oneonone.el', then do NOT also use library `cursor-chg.el'.
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2015-10-19 1:47 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-10-18 15:19 [PATCH] Add idle-cursor-morph Taylan Ulrich Bayırlı/Kammer
2015-10-18 16:00 ` Drew Adams
2015-10-18 16:39 ` Taylan Ulrich Bayırlı/Kammer
2015-10-18 16:17 ` John Wiegley
2015-10-19 1:47 ` Drew Adams
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).