From mboxrd@z Thu Jan 1 00:00:00 1970 From: Carsten Dominik Subject: Re: Bug: org-install must precede customization [7.02trans] Date: Fri, 12 Nov 2010 23:50:35 -0600 Message-ID: References: Mime-Version: 1.0 (Apple Message framework v936) Content-Type: text/plain; charset=US-ASCII; format=flowed; delsp=yes Content-Transfer-Encoding: 7bit Return-path: Received: from [140.186.70.92] (port=47660 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1PH90f-0000V3-GG for emacs-orgmode@gnu.org; Sat, 13 Nov 2010 00:50:49 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1PH90a-0007Zg-6A for emacs-orgmode@gnu.org; Sat, 13 Nov 2010 00:50:45 -0500 Received: from mail-gy0-f169.google.com ([209.85.160.169]:34363) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1PH90Z-0007ZI-Sk for emacs-orgmode@gnu.org; Sat, 13 Nov 2010 00:50:40 -0500 Received: by gyh3 with SMTP id 3so238494gyh.0 for ; Fri, 12 Nov 2010 21:50:39 -0800 (PST) In-Reply-To: List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: David Abrahams Cc: Org-mode mailing list Hi David, On Nov 12, 2010, at 11:01 PM, David Abrahams wrote: > > Hi Carsten, > > I'm sorry to belabor this, but I'm a little confused about what you're > saying. that is because I just talked garbage. Let me try a cleaner version. If I put an autoload cookie in front of a defun, a stub for this function will be created in the autoloads file (for Org this is org- install.el). When this file gets loaded and the corresponding form evaluated, Emacs knows about this function and it will load the corresponding file to get the full function whenever the function is first called. We had a discussion here some point ago where someone complained that org-capture-templates was not available for customization before org- capture.el actually has been loaded. I thought that putting an autoload cookie in front of a defcustom form would have the desired effect. I had hoped that org-install.el then would make Emacs aware of org-capture-templates and load org-capture.el whenever org-capture- templates first was needed. However, it does not work like this. In org-install.el, the defcustom is turned into a defvar, which defines the variable and sets it to nil. When later the customize forms are evaluated, they see the variable already defined and assume that the user has set this value on purpose. So customize does not think it is entitled to overrule the users action and so does *not* install its saved value. So this creates a dependence on the load sequence of org-install.el and custom.el. This is bad and unpredictable. Therefore I clearly prefer that org-capture-templates is only available when org-capture indeed has been loaded, and that an error is produced when I try to access the variable before it is defined. Moreover, if you use `C-c r C' to customize the variable, it will work because the function org-capture is correctly autoloaded. That is why I have decided to remove the autoload cookie. Better? - Carsten > > At Fri, 12 Nov 2010 22:40:10 -0600, > Carsten Dominik wrote: >> >> >> On Nov 12, 2010, at 9:28 PM, David Abrahams wrote: >> >>> >>> Hi Carsten, >>> >>> Is it merely the autoload of org-capture-templates, or is this a >>> general rule for everything in org-install? I think I'm perfectly >>> happy to work with the dependency in place as long as it's >>> documented. >> >> I think that this should work, but it clearly does not. So the only >> clean thing is it to remove it. The proper sequence should be >> to first load org-install and the do any other configuration. > > Are you saying "it clearly does not" based solely on the information I > gave you, or is there something else? I ask because what you say is > the "proper sequence" is supported by my experience. When I did > things in that order, everything worked. When I didn't, I ran into > this problem. It still seems to me that fundamental problem was > simply that the ordering requirement wasn't documented... unless > there's some information I'm missing? > > Thanks > >> >> - Carsten >> >>> For most people it wouldn't be an issue since custom-* puts its >>> custom-set-variables call at the end of the file. I think you >>> need to >>> be using something like initsplit to see the problem. >>> >>> At Fri, 12 Nov 2010 16:29:15 -0600, >>> Carsten Dominik wrote: >>>> >>>> Hi David, >>>> >>>> thanks for investigating this. >>>> >>>> It seems to me that the autoload has caused more problems than it >>>> solved - so I have removed the autoload again. >>>> >>>> - Carsten >>>> >>>> On Nov 12, 2010, at 12:45 PM, David Abrahams wrote: >>>> >>>>> >>>>> Remember to cover the basics, that is, what you expected to happen >>>>> and >>>>> what in fact did happen. You don't know how to make a good >>>>> report? >>>>> See >>>>> >>>>> http://orgmode.org/manual/Feedback.html#Feedback >>>>> >>>>> Your bug report will be posted to the Org-mode mailing list. >>>>> ------------------------------------------------------------------------ >>>>> >>>>> There's an undocumented dependency between org-install and >>>>> customizations. In particular, if custom-set-variables is >>>>> called to >>>>> set >>>>> org-capture-templates, and then org-install is loaded, >>>>> org-capture-templates will be reset to nil. I tested this with >>>>> >>>>> emacs -Q >>>>> >>>>> Emacs : GNU Emacs 23.2.1 (x86_64-apple-darwin, NS apple- >>>>> appkit-1038.29) >>>>> of 2010-05-08 on black.local >>>>> Package: Org-mode version 7.02trans >>>>> >>>>> current state: >>>>> ============== >>>>> (setq >>>>> org-agenda-deadline-leaders '("D: " "D%d: ") >>>>> org-clock-in-switch-to-state "STARTED" >>>>> org-agenda-skip-scheduled-if-deadline-is-shown t >>>>> org-export-latex-after-initial-vars-hook '(org-beamer-after- >>>>> initial- >>>>> vars) >>>>> org-todo-keyword-faces '(("TODO" :foreground "medium blue" :weight >>>>> bold) >>>>> ("APPT" :foreground "medium blue" :weight >>>>> bold) >>>>> ("NOTE" :foreground "brown" :weight bold) >>>>> ("STARTED" :foreground "dark orange" >>>>> :weight bold) >>>>> ("WAITING" :foreground "red" :weight bold) >>>>> ("DELEGATED" :foreground "dark violet" >>>>> :weight bold) >>>>> ("DEFERRED" :foreground "dark blue" :weight >>>>> bold) >>>>> ("SOMEDAY" :foreground "dark blue" :weight >>>>> bold) >>>>> ("PROJECT" :height 1.5 :weight bold >>>>> :foreground "black")) >>>>> org-speed-command-hook '(org-speed-command-default-hook org-babel- >>>>> speed-command-hook) >>>>> org-agenda-custom-commands '(("E" "Errands (next 3 days)" tags >>>>> "Errand&TODO<>\"DONE\"&TODO<> >>>>> \"CANCELLED\"&STYLE<>\"habit\"&SCHEDULED<\"<+3d>\"" >>>>> ((org-agenda-overriding-header >>>>> "Errands (next 3 days)") >>>>> ) >>>>> ) >>>>> ("A" "Priority #A tasks" agenda "" >>>>> ((org-agenda-ndays 1) >>>>> (org-agenda-overriding-header >>>>> "Today's priority #A tasks: ") >>>>> (org-agenda-skip-function >>>>> (quote (org-agenda-skip-entry-if >>>>> (quote notregexp) "\\=.*\\[#A\\]")) >>>>> ) >>>>> ) >>>>> ) >>>>> ("B" "Priority #A and #B tasks" agenda >>>>> "" >>>>> ((org-agenda-ndays 1) >>>>> (org-agenda-overriding-header >>>>> "Today's priority #A and #B tasks: ") >>>>> (org-agenda-skip-function >>>>> (quote (org-agenda-skip-entry-if >>>>> (quote regexp) "\\=.*\\[#C\\]"))) >>>>> ) >>>>> ) >>>>> ("w" "Waiting/delegated tasks" tags >>>>> "TODO=\"WAITING\"|TODO=\"DELEGATED\"" >>>>> ((org-agenda-overriding-header >>>>> "Waiting/delegated tasks:") >>>>> (org-agenda-sorting-strategy >>>>> (quote (todo-state-up priority-down >>>>> category-up))) >>>>> ) >>>>> ) >>>>> ("u" "Unscheduled tasks" tags >>>>> "TODO<>\"\"&TODO<>\"DONE\"&TODO<> >>>>> \"CANCELLED\"&TODO<>\"NOTE\"&CATEGORY<>{CEG\\|ABC\\|Bizcard\\| >>>>> Adagio\ >>>>> \|EVAprint\\|\\}" >>>>> ((org-agenda-overriding-header >>>>> "Unscheduled tasks: ") >>>>> >>>>> (org >>>>> -agenda-skip-function >>>>> >>>>> (quote >>>>> >>>>> >>>>> >>>>> (org >>>>> -agenda-skip-entry-if >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> (quote >>>>> scheduled) >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> (quote >>>>> deadline) >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> (quote >>>>> timestamp) >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> (quote >>>>> regexp) >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> "\\* >>>>> \\(DEFERRED \\|SOMEDAY\\)") >>>>> >>>>> >>>>> >>>>> ) >>>>> >>>>> ) >>>>> >>>>> (org >>>>> -agenda-files >>>>> >>>>> (quote >>>>> >>>>> >>>>> >>>>> ("~ >>>>> /Dropbox/todo.txt") >>>>> >>>>> >>>>> >>>>> ) >>>>> >>>>> ) >>>>> >>>>> (org >>>>> -agenda-sorting-strategy >>>>> >>>>> (quote >>>>> >>>>> >>>>> >>>>> (todo >>>>> -state-up priority-down category-up) >>>>> >>>>> >>>>> >>>>> ) >>>>> >>>>> ) >>>>> >>>>> ) >>>>> ) >>>>> ("U" "Deferred tasks" tags >>>>> "TODO=\"DEFERRED\"&CATEGORY<>{CEG\\| >>>>> ABC >>>>> \\|Bizcard\\|Adagio\\|EVAprint\\|\\}" >>>>> ((org-agenda-overriding-header >>>>> "Deferred tasks:") >>>>> ) >>>>> ) >>>>> ("S" "Someday tasks" tags >>>>> "TODO=\"SOMEDAY\"&CATEGORY<>{CEG\\| >>>>> ABC\ >>>>> \|Bizcard\\|Adagio\\|EVAprint\\|\\}" >>>>> ((org-agenda-overriding-header >>>>> "Someday tasks:") >>>>> ) >>>>> ) >>>>> ("G" "Ledger tasks (all)" tags-todo >>>>> "TODO<>{SOMEDAY}" >>>>> ((org-agenda-files (quote ("~/src/ >>>>> ledger/plan/TODO"))) >>>>> (org-agenda-overriding-header "Ledger >>>>> tasks:") >>>>> (org-agenda-sorting-strategy >>>>> (quote (todo-state-up priority-down >>>>> category-up))) >>>>> ) >>>>> ) >>>>> ("l" "Ledger tasks" tags-todo >>>>> "TODO<>{SOMEDAY\\|DEFERRED}" >>>>> ((org-agenda-files (quote ("~/src/ >>>>> ledger/plan/TODO"))) >>>>> (org-agenda-overriding-header "Ledger >>>>> tasks:") >>>>> (org-agenda-sorting-strategy >>>>> (quote (todo-state-up priority-down >>>>> category-up))) >>>>> (org-agenda-skip-function >>>>> (quote (org-agenda-skip-entry-if >>>>> (quote regexp) "\\=.*\\[#C\\]"))) >>>>> ) >>>>> ) >>>>> ("L" "Ledger tasks not in Bugzilla" >>>>> alltodo "" >>>>> ((org-agenda-files (quote ("~/src/ >>>>> ledger/plan/TODO"))) >>>>> (org-agenda-overriding-header "Ledger >>>>> tasks:") >>>>> (org-agenda-sorting-strategy >>>>> (quote (todo-state-up priority-down >>>>> category-up))) >>>>> (org-agenda-skip-function >>>>> (quote (org-agenda-skip-entry-if >>>>> (quote regexp) "\\(bug:\\)"))) >>>>> ) >>>>> ) >>>>> ("r" "Uncategorized items" tags >>>>> "CATEGORY=\"Inbox\"&LEVEL=2" >>>>> ((org-agenda-overriding-header >>>>> "Uncategorized items"))) >>>>> ("W" "Unscheduled work tasks" tags >>>>> "CATEGORY={CEG\\|ABC\\|Bizcard\\| >>>>> Adagio >>>>> \\|IT\\|EVAprint}&CATEGORY<>\"Website\"&TODO<>\"DONE\"&TODO<> >>>>> \"CANCELLED\"&TODO<>\"NOTE\"&TODO<>\"\"&LEVEL>1" >>>>> ((org-agenda-overriding-header >>>>> "Unscheduled work tasks") >>>>> >>>>> (org >>>>> -agenda-skip-function >>>>> >>>>> (quote >>>>> >>>>> >>>>> >>>>> (org >>>>> -agenda-skip-entry-if >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> (quote >>>>> scheduled) >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> (quote >>>>> deadline) >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> ) >>>>> >>>>> >>>>> >>>>> ) >>>>> >>>>> ) >>>>> >>>>> (org >>>>> -agenda-sorting-strategy >>>>> >>>>> (quote >>>>> >>>>> >>>>> >>>>> (todo >>>>> -state-up priority-down) >>>>> >>>>> >>>>> >>>>> ) >>>>> >>>>> ) >>>>> >>>>> ) >>>>> ) >>>>> ("z" "CEG tasks not in Bugzilla" tags >>>>> "CATEGORY={CEG\\|ABC\\|Bizcard\\| >>>>> Adagio >>>>> \\|IT\\|EVAprint}&CATEGORY<>{Website\\|Admin}&TODO<>\"DONE >>>>> \"&TODO<> >>>>> \"CANCELLED\"&TODO<>\"NOTE\"&TODO<>\"\"&LEVEL>1&SCOPE<>\"local\"" >>>>> ((org-agenda-overriding-header "CEG >>>>> tasks not in Bugzilla") >>>>> >>>>> (org >>>>> -agenda-skip-function >>>>> >>>>> (quote >>>>> >>>>> >>>>> >>>>> (org >>>>> -agenda-skip-entry-if >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> (quote >>>>> regexp) >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> "\\(cegbug >>>>> :\\)") >>>>> >>>>> >>>>> >>>>> ) >>>>> >>>>> ) >>>>> >>>>> ) >>>>> ) >>>>> ("Z" "CEG tasks in Bugzilla" tags >>>>> "CATEGORY={CEG\\|ABC\\|Bizcard\\| >>>>> Adagio >>>>> \\|IT\\|EVAprint}&TODO<>\"DONE\"&TODO<>\"CANCELLED\"&TODO<> >>>>> \"DELEGATED\"&TODO<>\"NOTE\"&LEVEL>1" >>>>> ((org-agenda-overriding-header "CEG >>>>> tasks in Bugzilla") >>>>> >>>>> (org >>>>> -agenda-skip-function >>>>> >>>>> (quote >>>>> >>>>> >>>>> >>>>> (org >>>>> -agenda-skip-entry-if >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> (quote >>>>> notregexp) >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> "cegbug >>>>> :") >>>>> >>>>> >>>>> >>>>> ) >>>>> >>>>> ) >>>>> >>>>> (org >>>>> -agenda-sorting-strategy >>>>> >>>>> (quote >>>>> >>>>> >>>>> >>>>> (todo >>>>> -state-up category-down priority-down user-defined-up) >>>>> >>>>> >>>>> >>>>> ) >>>>> >>>>> ) >>>>> >>>>> ) >>>>> ) >>>>> ) >>>>> org-agenda-files '("~/Dropbox/todo.txt" "~/Dropbox/Projects") >>>>> org-agenda-include-diary t >>>>> org-blocker-hook '(org-block-todo-from-children-or-siblings-or- >>>>> parent) >>>>> org-agenda-menu-two-column t >>>>> org-agenda-tags-column -100 >>>>> org-hide-leading-stars t >>>>> org-clock-into-drawer "LOGBOOK" >>>>> org-completion-use-ido t >>>>> org-metaup-hook '(org-babel-load-in-session-maybe) >>>>> org-footnote-section nil >>>>> org-agenda-scheduled-leaders '("" "S%d: ") >>>>> org-archive-save-context-info '(time category itags) >>>>> org-after-todo-state-change-hook '(org-clock-out-if-current) >>>>> org-agenda-text-search-extra-files '(agenda-archives) >>>>> org-archive-location "TODO-archive::" >>>>> org-agenda-skip-unavailable-files t >>>>> org-agenda-default-appointment-duration 60 >>>>> org-time-clocksum-use-fractional t >>>>> org-agenda-sorting-strategy '((agenda habit-down time-up todo- >>>>> state- >>>>> up priority-down category-keep) >>>>> (todo priority-down category-keep) >>>>> (tags priority-down category-keep) >>>>> (search category-keep)) >>>>> org-export-blocks-postblock-hook '(org-exp-res/src-name-cleanup) >>>>> org-agenda-prefix-format '((agenda . " %-11:c%?-12t% s") >>>>> (timeline >>>>> . " % s") (todo . " %-11:c") >>>>> (tags . " %-11:c")) >>>>> org-habit-preceding-days 42 >>>>> org-export-latex-format-toc-function 'org-export-latex-format-toc- >>>>> default >>>>> org-agenda-skip-scheduled-if-done t >>>>> org-stuck-projects '("+LEVEL=1/-DONE" ("TODO" "STARTED" "NEXT" >>>>> "NEXTACTION") nil >>>>> "\\(Appointments\\|Notes\\|Anniversaries\\)") >>>>> org-clock-in-resume t >>>>> org-export-preprocess-hook '(org-eval-replace-snippts) >>>>> org-tab-first-hook '(org-hide-block-toggle-maybe org-src-native- >>>>> tab- >>>>> command-maybe >>>>> org-babel-hide-result-toggle-maybe) >>>>> org-src-mode-hook '(org-src-babel-configure-edit-buffer >>>>> org-src-mode- >>>>> configure-edit-buffer) >>>>> org-mac-mail-account "GMail: BoostPro" >>>>> org-cycle-global-at-bob t >>>>> org-confirm-shell-link-function nil >>>>> org-reveal-start-hook '(org-decrypt-entry) >>>>> org-export-first-hook '(org-beamer-initialize-open-trackers) >>>>> org-use-tag-inheritance nil >>>>> org-clock-persist 'history >>>>> org-todo-keywords '((sequence "TODO" "APPT" "|" "DONE" "NOTE")) >>>>> org-agenda-before-write-hook '(org-agenda-add-entry-text) >>>>> org-M-RET-may-split-line '((headline) (default . t)) >>>>> org-default-notes-file "~/Dropbox/todo.txt" >>>>> org-directory "~/Dropbox/Projects" >>>>> org-tag-alist '((#("LUANN" 0 5 (face nil)) . 110) (#("WORK" 0 4 >>>>> (face nil)) . 119)) >>>>> org-agenda-persistent-filter t >>>>> org-babel-pre-tangle-hook '(save-buffer) >>>>> org-cycle-hook '(org-cycle-hide-archived-subtrees org-cycle-hide- >>>>> drawers org-cycle-show-empty-lines >>>>> org-optimize-window-after-visibility-change) >>>>> org-export-preprocess-before-normalizing-links-hook '(org-remove- >>>>> file-link-modifiers) >>>>> org-use-speed-commands t >>>>> org-mode-hook '((lambda nil (local-set-key [(control 44)] (quote >>>>> backward-word))) >>>>> #[nil "\300\301\302\303\304$\207" >>>>> [org-add-hook change-major-mode-hook org-show- >>>>> block-all append local] 5] >>>>> #[nil "\300\301\302\303\304$\207" >>>>> [org-add-hook change-major-mode-hook org-babel- >>>>> show-result-all append local] 5] >>>>> org-babel-result-hide-spec org-babel-hide-all- >>>>> hashes) >>>>> org-agenda-menu-show-matcher nil >>>>> org-clock-out-remove-zero-time-clocks t >>>>> org-font-lock-hook '(org-eval-handle-snippets) >>>>> org-agenda-ndays 1 >>>>> org-refile-targets '((org-agenda-files :level . 1) (org-agenda- >>>>> files :todo . "PROJECT")) >>>>> org-extend-today-until 2 >>>>> org-ctrl-c-ctrl-c-hook '(org-babel-hash-at-point org-babel- >>>>> execute- >>>>> safely-maybe) >>>>> org-confirm-elisp-link-function nil >>>>> org-fast-tag-selection-single-key 'expert >>>>> org-todo-repeat-to-state "TODO" >>>>> org-clock-modeline-total 'current >>>>> org-agenda-start-on-weekday nil >>>>> org-agenda-fontify-priorities t >>>>> org-export-interblocks '((lob org-babel-exp-lob-one-liners) (src >>>>> org- >>>>> babel-exp-inline-src-blocks)) >>>>> org-enforce-todo-dependencies t >>>>> org-agenda-skip-deadline-if-done t >>>>> org-reverse-note-order t >>>>> org-occur-hook '(org-first-headline-recenter) >>>>> org-export-preprocess-before-selecting-backend-code-hook '(org- >>>>> beamer-select-beamer-code) >>>>> org-agenda-cmp-user-defined 'org-cmp-ceg-bugs >>>>> org-export-preprocess-after-include-files-hook '(org-export- >>>>> blocks- >>>>> preprocess) >>>>> org-tags-column -97 >>>>> org-modules '(org-crypt org-id org-habit org-mac-message org- >>>>> bookmark org-eval) >>>>> org-agenda-auto-exclude-function 'org-my-auto-exclude-function >>>>> org-ellipsis 'org-habit-alert-face >>>>> org-export-latex-final-hook '(org-beamer-amend-header >>>>> org-beamer-fix- >>>>> toc >>>>> org-beamer-auto-fragile-frames >>>>> org-beamer-place-default-actions-for- >>>>> lists) >>>>> org-metadown-hook '(org-babel-pop-to-session-maybe) >>>>> org-clock-idle-time 10 >>>>> org-attach-method 'mv >>>>> org-export-blocks '((src org-babel-exp-src-blocks nil) (comment >>>>> org- >>>>> export-blocks-format-comment t) >>>>> (ditaa org-export-blocks-format-ditaa nil) >>>>> (dot org-export-blocks-format-dot nil)) >>>>> ) >>>>> -- >>>>> Dave Abrahams >>>>> BoostPro Computing >>>>> http://www.boostpro.com >>>>> >>>>> >>>>> _______________________________________________ >>>>> Emacs-orgmode mailing list >>>>> Please use `Reply All' to send replies to the list. >>>>> Emacs-orgmode@gnu.org >>>>> http://lists.gnu.org/mailman/listinfo/emacs-orgmode >>>> >>> >>> >>> -- >>> Dave Abrahams >>> BoostPro Computing >>> http://www.boostpro.com >>> >> > > > -- > Dave Abrahams > BoostPro Computing > http://www.boostpro.com >