emacs-devel
[Top][All Lists]
Advanced

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

Re: More about blink-cursor-mode


From: Stefan
Subject: Re: More about blink-cursor-mode
Date: Sun, 20 Feb 2005 16:38:37 -0500
User-agent: Gnus/5.11 (Gnus v5.11) Emacs/21.3.50 (darwin)

> 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 via email to

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