emacs-devel
[Top][All Lists]
Advanced

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

Re: find-file-hook as illustration of Custom problems


From: Luc Teirlinck
Subject: Re: find-file-hook as illustration of Custom problems
Date: Thu, 10 Feb 2005 18:09:57 -0600 (CST)

My previously posted patch was indeed not very good.  Among other
things `C-h v blinking-cursor-mode' did not find the defcustom.  The
patch you proposed has a similar problem.  Also cus-start.el is meant
for variables defined in the C code.  I believe that we should avoid
using it for Lisp variables, if possible.  I now believe that the
following patch to frame.el would be better.  I believe that Per
designed the standard value to be an unevaluated expression exactly to
allow what the patch below does.  The accompanying patch to startup.el
is now very minor.

===File ~/frame.el-diff=====================================
*** frame.el    09 Feb 2005 15:59:13 -0600      1.215
--- frame.el    10 Feb 2005 17:42:44 -0600      
***************
*** 1253,1262 ****
  
  (defvar blink-cursor-timer nil
    "Timer started from `blink-cursor-start'.
! This timer calls `blink-cursor' every `blink-cursor-interval' seconds.")
  
! (defvar blink-cursor-mode nil
!   "Non-nil means blinking cursor is active.")
  
  (defun blink-cursor-mode (arg)
    "Toggle blinking cursor mode.
--- 1253,1289 ----
  
  (defvar blink-cursor-timer nil
    "Timer started from `blink-cursor-start'.
! 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 concrete 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 making sure 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)
    "Toggle blinking cursor mode.
***************
*** 1289,1306 ****
          (setq blink-cursor-mode t))
        (internal-show-cursor nil t))))
  
- ;; Note that this is really initialized from startup.el before
- ;; the init-file is read.
- 
- (defcustom blink-cursor nil
-   "*Non-nil means blinking cursor mode is active."
-   :group 'cursor
-   :tag "Blinking cursor"
-   :type 'boolean
-   :set #'(lambda (symbol value)
-          (set-default symbol value)
-          (blink-cursor-mode (or value 0))))
- 
  (defun blink-cursor-start ()
    "Timer function called from the timer `blink-cursor-idle-timer'.
  This starts the timer `blink-cursor-timer', which makes the cursor blink
--- 1316,1321 ----
============================================================

===File ~/startup.el-diff===================================
*** startup.el  28 Dec 2004 09:50:38 -0600      1.337
--- startup.el  10 Feb 2005 17:18:09 -0600      
***************
*** 735,746 ****
                (<= (frame-parameter nil 'tool-bar-lines) 0))
      (tool-bar-mode 1))
  
!   ;; Can't do this init in defcustom because window-system isn't set.
    (unless (or noninteractive
              emacs-quick-startup
                (eq system-type 'ms-dos)
                (not (memq window-system '(x w32))))
-     (setq-default blink-cursor t)
      (blink-cursor-mode 1))
  
    (unless noninteractive
--- 735,748 ----
                (<= (frame-parameter nil 'tool-bar-lines) 0))
      (tool-bar-mode 1))
  
!   ;; Can't do this init in defcustom because the relevant variables
!   ;; are not set.  If you make any changes to the `or' form below,
!   ;; you should also change the corresponding expression in the
!   ;; defcustom in frame.el, or Custom will be badly confused.
    (unless (or noninteractive
              emacs-quick-startup
                (eq system-type 'ms-dos)
                (not (memq window-system '(x w32))))
      (blink-cursor-mode 1))
  
    (unless noninteractive
============================================================




reply via email to

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