From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Luc Teirlinck Newsgroups: gmane.emacs.devel Subject: Re: org-mode and mode hooks. Date: Tue, 31 May 2005 21:47:22 -0500 (CDT) Message-ID: <200506010247.j512lMJ21758@raven.dms.auburn.edu> References: <87y8a3mnz8.fsf@xs4all.nl> <87ll63weye.fsf-monnier+emacs@gnu.org> <200505252135.j4PLZvt26969@raven.dms.auburn.edu> <87hdgrufcl.fsf-monnier+emacs@gnu.org> <200505260359.j4Q3xbj28809@raven.dms.auburn.edu> <87is16rsid.fsf-monnier+emacs@gnu.org> <200505261501.j4QF17h00246@raven.dms.auburn.edu> <87psveq60w.fsf-monnier+emacs@gnu.org> <200505271717.j4RHHGD07067@raven.dms.auburn.edu> <200505290157.j4T1vus10117@raven.dms.auburn.edu> <200505292354.j4TNsTE13354@raven.dms.auburn.edu> NNTP-Posting-Host: main.gmane.org X-Trace: sea.gmane.org 1117594177 32329 80.91.229.2 (1 Jun 2005 02:49:37 GMT) X-Complaints-To: usenet@sea.gmane.org NNTP-Posting-Date: Wed, 1 Jun 2005 02:49:37 +0000 (UTC) Cc: emacs-devel@gnu.org, monnier@iro.umontreal.ca, mmaug@yahoo.com, Lute.Kamstra.lists@xs4all.nl, dominik@science.uva.nl Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Wed Jun 01 04:49:36 2005 Return-path: Original-Received: from lists.gnu.org ([199.232.76.165]) by ciao.gmane.org with esmtp (Exim 4.43) id 1DdJI6-0003En-Nj for ged-emacs-devel@m.gmane.org; Wed, 01 Jun 2005 04:49:11 +0200 Original-Received: from localhost ([127.0.0.1] helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1DdJNJ-0001Ax-Hv for ged-emacs-devel@m.gmane.org; Tue, 31 May 2005 22:54:33 -0400 Original-Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1DdJMk-00012b-Eq for emacs-devel@gnu.org; Tue, 31 May 2005 22:53:58 -0400 Original-Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1DdJMf-0000zX-6H for emacs-devel@gnu.org; Tue, 31 May 2005 22:53:55 -0400 Original-Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1DdJMe-0000ye-Ed for emacs-devel@gnu.org; Tue, 31 May 2005 22:53:52 -0400 Original-Received: from [131.204.53.104] (helo=manatee.dms.auburn.edu) by monty-python.gnu.org with esmtp (Exim 4.34) id 1DdJIq-00008S-6z; Tue, 31 May 2005 22:49:56 -0400 Original-Received: from raven.dms.auburn.edu (raven.dms.auburn.edu [131.204.53.29]) by manatee.dms.auburn.edu (8.12.10/8.12.10) with ESMTP id j512lwCK001450; Tue, 31 May 2005 21:47:58 -0500 (CDT) Original-Received: (from teirllm@localhost) by raven.dms.auburn.edu (8.11.7p1+Sun/8.11.7) id j512lMJ21758; Tue, 31 May 2005 21:47:22 -0500 (CDT) X-Authentication-Warning: raven.dms.auburn.edu: teirllm set sender to teirllm@dms.auburn.edu using -f Original-To: rms@gnu.org In-reply-to: (message from Richard Stallman on Tue, 31 May 2005 00:18:14 -0400) 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 Xref: news.gmane.org gmane.emacs.devel:37981 X-Report-Spam: http://spam.gmane.org/gmane.emacs.devel:37981 Richard Stallman wrote: Would you please explain what problem would happen in this case? I could, but it would be moot. The patch to easy-mmode I propose below does not have the problem. It assumes, however, that the problems for Font Lock mode get taken care of. ===File ~/easy-mmode-diff=================================== *** easy-mmode.el 22 May 2005 16:50:33 -0500 1.63 --- easy-mmode.el 31 May 2005 19:34:34 -0500 *************** *** 271,284 **** TURN-ON is a function that will be called with no args in every buffer and that should try to turn MODE on if applicable for that buffer. KEYS is a list of CL-style keyword arguments: ! :group to specify the custom group." (let* ((global-mode-name (symbol-name global-mode)) (pretty-name (easy-mmode-pretty-mode-name mode)) (pretty-global-name (easy-mmode-pretty-mode-name global-mode)) (group nil) (extra-args nil) (buffers (intern (concat global-mode-name "-buffers"))) ! (cmmh (intern (concat global-mode-name "-cmmh")))) ;; Check keys. (while (keywordp (car keys)) --- 271,293 ---- TURN-ON is a function that will be called with no args in every buffer and that should try to turn MODE on if applicable for that buffer. KEYS is a list of CL-style keyword arguments: ! :group to specify the custom group. ! ! If MODE's set-up depends on the major mode in effect when it was ! enabled, then disabling and reenabling MODE should make MODE work ! correctly with the current major mode. This is important to ! prevent problems with derived modes, that is, major modes that ! call another major mode in their body." ! (let* ((global-mode-name (symbol-name global-mode)) (pretty-name (easy-mmode-pretty-mode-name mode)) (pretty-global-name (easy-mmode-pretty-mode-name global-mode)) (group nil) (extra-args nil) (buffers (intern (concat global-mode-name "-buffers"))) ! (buffers-check (intern (concat global-mode-name "-check-buffers"))) ! (cmmh (intern (concat global-mode-name "-cmmh"))) ! (stored-mode (intern (concat (symbol-name mode) "-stored-mode")))) ;; Check keys. (while (keywordp (car keys)) *************** *** 294,299 **** --- 303,310 ---- "-mode\\'" "" (symbol-name mode)))))) `(progn + (defvar ,stored-mode nil) + (make-variable-buffer-local ',stored-mode) ;; The actual global minor-mode (define-minor-mode ,global-mode ,(format "Toggle %s in every buffer. *************** *** 307,314 **** --- 318,327 ---- (if ,global-mode (progn (add-hook 'after-change-major-mode-hook ',buffers) + (add-hook 'find-file-hook ',buffers-check) (add-hook 'change-major-mode-hook ',cmmh)) (remove-hook 'after-change-major-mode-hook ',buffers) + (remove-hook 'find-file-hook ',buffers-check) (remove-hook 'change-major-mode-hook ',cmmh)) ;; Go through existing buffers. *************** *** 325,341 **** ;; The function that calls TURN-ON in each buffer. (defun ,buffers () ! (remove-hook 'post-command-hook ',buffers) (while ,buffers (let ((buf (pop ,buffers))) (when (buffer-live-p buf) ! (with-current-buffer buf (,turn-on)))))) ! (put ',buffers 'definition-name ',global-mode) ;; The function that catches kill-all-local-variables. (defun ,cmmh () (add-to-list ',buffers (current-buffer)) ! (add-hook 'post-command-hook ',buffers)) (put ',cmmh 'definition-name ',global-mode)))) ;;; --- 338,374 ---- ;; The function that calls TURN-ON in each buffer. (defun ,buffers () ! (dolist (buf ,buffers) ! (when (buffer-live-p buf) ! (with-current-buffer buf ! (if ,mode ! (unless (eq ,stored-mode major-mode) ! (,mode -1) ! (,turn-on) ! (setq ,stored-mode major-mode)) ! (,turn-on) ! (setq ,stored-mode major-mode)))))) ! (put ',buffers 'definition-name ',global-mode) ! ! (defun ,buffers-check () ! (remove-hook 'post-command-hook ',buffers-check) (while ,buffers (let ((buf (pop ,buffers))) (when (buffer-live-p buf) ! (with-current-buffer buf ! (if ,mode ! (unless (eq ,stored-mode major-mode) ! (,mode -1) ! (,turn-on) ! (setq ,stored-mode major-mode)) ! (,turn-on) ! (setq ,stored-mode major-mode))))))) ! (put ',buffers-check 'definition-name ',global-mode) ;; The function that catches kill-all-local-variables. (defun ,cmmh () (add-to-list ',buffers (current-buffer)) ! (add-hook 'post-command-hook ',buffers-check)) (put ',cmmh 'definition-name ',global-mode)))) ;;; ============================================================