From mboxrd@z Thu Jan 1 00:00:00 1970 Path: main.gmane.org!not-for-mail From: Stefan Newsgroups: gmane.emacs.devel Subject: Re: More about blink-cursor-mode Date: Sun, 20 Feb 2005 16:38:37 -0500 Message-ID: References: <200502200155.j1K1thb29289@raven.dms.auburn.edu> NNTP-Posting-Host: main.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Trace: sea.gmane.org 1108935916 29694 80.91.229.2 (20 Feb 2005 21:45:16 GMT) X-Complaints-To: usenet@sea.gmane.org NNTP-Posting-Date: Sun, 20 Feb 2005 21:45:16 +0000 (UTC) Cc: emacs-devel@gnu.org Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Sun Feb 20 22:45:15 2005 Original-Received: from lists.gnu.org ([199.232.76.165]) by ciao.gmane.org with esmtp (Exim 4.43) id 1D2yso-0003Gk-QK for ged-emacs-devel@m.gmane.org; Sun, 20 Feb 2005 22:44:55 +0100 Original-Received: from localhost ([127.0.0.1] helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1D2z9d-0006MN-L5 for ged-emacs-devel@m.gmane.org; Sun, 20 Feb 2005 17:02:17 -0500 Original-Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1D2z0h-00029t-6p for emacs-devel@gnu.org; Sun, 20 Feb 2005 16:53:03 -0500 Original-Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1D2z0T-00026G-DT for emacs-devel@gnu.org; Sun, 20 Feb 2005 16:52:56 -0500 Original-Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1D2z0S-0001tT-8p for emacs-devel@gnu.org; Sun, 20 Feb 2005 16:52:48 -0500 Original-Received: from [206.47.199.164] (helo=simmts6-srv.bellnexxia.net) by monty-python.gnu.org with esmtp (Exim 4.34) id 1D2ymp-0003tp-S0 for emacs-devel@gnu.org; Sun, 20 Feb 2005 16:38:44 -0500 Original-Received: from empanada.home ([67.68.218.40]) by simmts6-srv.bellnexxia.net (InterMail vM.5.01.06.10 201-253-122-130-110-20040306) with ESMTP id <20050220213838.YSCG1597.simmts6-srv.bellnexxia.net@empanada.home>; Sun, 20 Feb 2005 16:38:38 -0500 Original-Received: by empanada.home (Postfix, from userid 502) id CD6A640D428; Sun, 20 Feb 2005 16:38:37 -0500 (EST) Original-To: Luc Teirlinck In-Reply-To: <200502200155.j1K1thb29289@raven.dms.auburn.edu> (Luc Teirlinck's message of "Sat, 19 Feb 2005 19:55:43 -0600 (CST)") User-Agent: Gnus/5.11 (Gnus v5.11) Emacs/21.3.50 (darwin) X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org X-MailScanner-To: ged-emacs-devel@m.gmane.org Xref: main.gmane.org gmane.emacs.devel:33655 X-Report-Spam: http://spam.gmane.org/gmane.emacs.devel:33655 > 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'.