From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: "Lennart Borgman (gmail)" Newsgroups: gmane.emacs.devel Subject: Re: Specifying mode in file variables trouble Date: Tue, 23 Sep 2008 19:22:50 +0200 Message-ID: <48D925EA.3030703@gmail.com> References: <48D44761.6000809@gmail.com> <87ljxny6n8.fsf@catnip.gol.com> <48D44C79.9020004@gmail.com> <48D63F30.8060102@gmail.com> <48D6E8FB.4070108@gmail.com> <48D79A25.7050000@gmail.com> <48D8BD92.5080403@gmail.com> NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Trace: ger.gmane.org 1222190595 12348 80.91.229.12 (23 Sep 2008 17:23:15 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Tue, 23 Sep 2008 17:23:15 +0000 (UTC) Cc: rms@gnu.org, emacs-devel@gnu.org To: Stefan Monnier Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Tue Sep 23 19:24:12 2008 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([199.232.76.165]) by lo.gmane.org with esmtp (Exim 4.50) id 1KiBcQ-0007mn-4B for ged-emacs-devel@m.gmane.org; Tue, 23 Sep 2008 19:24:10 +0200 Original-Received: from localhost ([127.0.0.1]:59229 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1KiBbO-0005kH-1F for ged-emacs-devel@m.gmane.org; Tue, 23 Sep 2008 13:23:06 -0400 Original-Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1KiBbI-0005ic-Ih for emacs-devel@gnu.org; Tue, 23 Sep 2008 13:23:00 -0400 Original-Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1KiBbG-0005hN-Vv for emacs-devel@gnu.org; Tue, 23 Sep 2008 13:23:00 -0400 Original-Received: from [199.232.76.173] (port=50402 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1KiBbG-0005hK-Qa for emacs-devel@gnu.org; Tue, 23 Sep 2008 13:22:58 -0400 Original-Received: from ch-smtp02.sth.basefarm.net ([80.76.149.213]:52464) by monty-python.gnu.org with esmtps (TLS-1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1KiBbF-0005ge-CM; Tue, 23 Sep 2008 13:22:57 -0400 Original-Received: from c83-254-151-87.bredband.comhem.se ([83.254.151.87]:64231 helo=[127.0.0.1]) by ch-smtp02.sth.basefarm.net with esmtp (Exim 4.68) (envelope-from ) id 1KiBbC-0002JY-9U; Tue, 23 Sep 2008 19:22:55 +0200 User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.9) Gecko/20071031 Thunderbird/2.0.0.9 Mnenhy/0.7.5.666 In-Reply-To: X-Enigmail-Version: 0.95.7 X-Antivirus: avast! (VPS 080923-0, 2008-09-23), Outbound message X-Antivirus-Status: Clean X-Originating-IP: 83.254.151.87 X-Scan-Result: No virus found in message 1KiBbC-0002JY-9U. X-Scan-Signature: ch-smtp02.sth.basefarm.net 1KiBbC-0002JY-9U 6838f24267a0fb875f2978329f8cd155 X-detected-operating-system: by monty-python.gnu.org: GNU/Linux 2.6? (barebone, rare!) 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:104060 Archived-At: Stefan Monnier wrote: >> set to nil (see the sources for `run-mode-hooks'). I have no idea what >> delayed-mode-hooks is used for so I do not know if setting > > It is used so that the parent mode hook is run at the end of the (child) > major mode, so that the user's hook functions (placed on the parent > hook) can take into account the variable values set by the child. Thanks. I might be beginning to understand. From what you wrote above and the somewhat scarse documentation I draw the conclusion that in normal case the child major modes mode hook is run before the parent major modes mode hook. So the order of running the hooks is childs local mode hook which also include running childs global hook (at the `t') parents' mode hooks If this is correct then I think that adding the call to mumamo-restore-most-buffer-locals first in the childs local mode hook would be the best. The values thus restored can then be changed by things coming later in the mode hooks. Since it looks like delay-mode-hook is something that we should not touch in case we are not the macro delay-mode-hook this is nothing we have to care about. So this is what I have got now: ;; Save local variables before switching major (mumamo-save-most-buffer-locals major-mode) ;; Restore local variables after switching, but do it in the mode ;; hook: (let ((mode-hook (intern-soft (concat (symbol-name major) "-hook"))) (restore-fun (lambda () (mumamo-restore-most-buffer-locals major)))) (when mode-hook ;; Put first in local hook to run it first: (add-hook mode-hook restore-fun nil t)) (funcall major) ;; <------- This is the major mode change (if (not mode-hook) (mumamo-restore-most-buffer-locals major) (remove-hook mode-hook restore-fun t)))