unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: Stefan <monnier@iro.umontreal.ca>
Cc: emacs-devel@gnu.org
Subject: Re: More about blink-cursor-mode
Date: Sun, 20 Feb 2005 16:38:37 -0500	[thread overview]
Message-ID: <m1zmxzruoq.fsf-monnier+emacs@gnu.org> (raw)
In-Reply-To: <200502200155.j1K1thb29289@raven.dms.auburn.edu> (Luc Teirlinck's message of "Sat, 19 Feb 2005 19:55:43 -0600 (CST)")

> The first change is, I believe, necessary.  The docstring  of
> `blink-cursor-mode' has to tell that one should not try to set the
> variable directly.

The change below which uses define-minor-mode fixes this part as
a side effect.

> I do not know about the other change.  If setting blink-cursor-mode
> buffer locally would make any sense, the code in front of the
> defcustom should use default-boundp and setq-default.

This code is run before any .emacs can ever affect the result, so it
doesn't matter.  In any case all this round-about hack seems completely
unnecessary (based on my tests) and if really the standard expression
signals an error if it is evaluated too early, then we can just wrap it with
a (condition-case nil ... (error nil)) or some such.  Seems like a much
better option than this nasty unexplained stuff we have now.

Any objection?


        Stefan


--- orig/lisp/frame.el
+++ mod/lisp/frame.el
@@ -1256,35 +1256,11 @@
 This timer calls `blink-cursor-timer-function' every
 `blink-cursor-interval' seconds.")
 
-;; The strange sequence below is meant to set both the right temporary
-;; value and the right "standard expression" , according to Custom,
-;; for blink-cursor-mode.  We do not know the standard _evaluated_
-;; value yet, because the standard expression uses values that are not
-;; yet set.  Evaluating it now would yield an error, but we make sure
-;; that it is not evaluated, by ensuring that blink-cursor-mode is set
-;; before the defcustom is evaluated and by using the right :initialize
-;; function.  The correct evaluated standard value will be installed
-;; in startup.el using exactly the same expression as in the defcustom.
-(defvar blink-cursor-mode)
-(unless (boundp 'blink-cursor-mode) (setq blink-cursor-mode nil))
-(defcustom blink-cursor-mode
-  (not (or noninteractive
-	   emacs-quick-startup
-	   (eq system-type 'ms-dos)
-	   (not (memq window-system '(x w32)))))
-  "*Non-nil means Blinking Cursor mode is active."
-  :group 'cursor
-  :tag "Blinking cursor"
-  :type 'boolean
-  :initialize 'custom-initialize-set
-  :set #'(lambda (symbol value)
-	   (set-default symbol value)
-	   (blink-cursor-mode (or value 0))))
-
-(defvaralias 'blink-cursor 'blink-cursor-mode)
-(make-obsolete-variable 'blink-cursor 'blink-cursor-mode "22.1")
-
-(defun blink-cursor-mode (arg)
+;; We do not know the standard _evaluated_ value yet, because the standard
+;; expression uses values that are not yet set.  The correct evaluated
+;; standard value will be installed in startup.el using exactly the same
+;; expression as in the defcustom.
+(define-minor-mode blink-cursor-mode
   "Toggle blinking cursor mode.
 With a numeric argument, turn blinking cursor mode on iff ARG is positive.
 When blinking cursor mode is enabled, the cursor of the selected
@@ -1293,27 +1293,29 @@
 Note that this command is effective only when Emacs
 displays through a window system, because then Emacs does its own
 cursor display.  On a text-only terminal, this is not implemented."
-  (interactive "P")
-  (let ((on-p (if (null arg)
-		  (not blink-cursor-mode)
-		(> (prefix-numeric-value arg) 0))))
+  :init-value (not (or noninteractive
+		       emacs-quick-startup
+		       (eq system-type 'ms-dos)
+		       (not (memq window-system '(x w32)))))
+  :global t
     (if blink-cursor-idle-timer
 	(cancel-timer blink-cursor-idle-timer))
     (if blink-cursor-timer
 	(cancel-timer blink-cursor-timer))
     (setq blink-cursor-idle-timer nil
-	  blink-cursor-timer nil
-	  blink-cursor-mode nil)
-    (if on-p
+	blink-cursor-timer nil)
+  (if blink-cursor-mode
 	(progn
 	  ;; Hide the cursor.
-	  ;(internal-show-cursor nil nil)
+	;;(internal-show-cursor nil nil)
 	  (setq blink-cursor-idle-timer
 		(run-with-idle-timer blink-cursor-delay
 				     blink-cursor-delay
-				     'blink-cursor-start))
-	  (setq blink-cursor-mode t))
-      (internal-show-cursor nil t))))
+				   'blink-cursor-start)))
+    (internal-show-cursor nil t)))
+
+(defvaralias 'blink-cursor 'blink-cursor-mode)
+(make-obsolete-variable 'blink-cursor 'blink-cursor-mode "22.1")
 
 (defun blink-cursor-start ()
   "Timer function called from the timer `blink-cursor-idle-timer'.

  reply	other threads:[~2005-02-20 21:38 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-02-20  1:55 More about blink-cursor-mode Luc Teirlinck
2005-02-20 21:38 ` Stefan [this message]
2005-02-21  3:27   ` Luc Teirlinck
2005-02-22  1:24   ` Luc Teirlinck
2005-02-22 13:52     ` Stefan Monnier
2005-02-23  2:53       ` Luc Teirlinck
2005-02-23  4:23         ` Stefan Monnier
2005-02-22  1:37   ` Luc Teirlinck
2005-02-22 13:54     ` Stefan Monnier
2005-02-22  8:42   ` Richard Stallman
2005-02-21 10:21 ` Richard Stallman

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=m1zmxzruoq.fsf-monnier+emacs@gnu.org \
    --to=monnier@iro.umontreal.ca \
    --cc=emacs-devel@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).