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 23:30:15 +0200 Message-ID: <48D95FE7.7040807@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> <48D925EA.3030703@gmail.com> <48D95601.8010703@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 1222205449 32316 80.91.229.12 (23 Sep 2008 21:30:49 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Tue, 23 Sep 2008 21:30:49 +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 23:31:46 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 1KiFTr-0004fM-GX for ged-emacs-devel@m.gmane.org; Tue, 23 Sep 2008 23:31:35 +0200 Original-Received: from localhost ([127.0.0.1]:56865 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1KiFSp-0008Hj-Kv for ged-emacs-devel@m.gmane.org; Tue, 23 Sep 2008 17:30:31 -0400 Original-Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1KiFSk-0008FJ-Fw for emacs-devel@gnu.org; Tue, 23 Sep 2008 17:30:26 -0400 Original-Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1KiFSh-0008Cx-TP for emacs-devel@gnu.org; Tue, 23 Sep 2008 17:30:26 -0400 Original-Received: from [199.232.76.173] (port=52538 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1KiFSh-0008Ck-N4 for emacs-devel@gnu.org; Tue, 23 Sep 2008 17:30:23 -0400 Original-Received: from ch-smtp01.sth.basefarm.net ([80.76.149.212]:48552) by monty-python.gnu.org with esmtps (TLS-1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1KiFSg-0007U6-5q; Tue, 23 Sep 2008 17:30:22 -0400 Original-Received: from c83-254-151-87.bredband.comhem.se ([83.254.151.87]:61785 helo=[127.0.0.1]) by ch-smtp01.sth.basefarm.net with esmtp (Exim 4.68) (envelope-from ) id 1KiFSd-0000yb-4Y; Tue, 23 Sep 2008 23:30:20 +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-ACL-Warn: Too high rate of unknown addresses received from you X-Scan-Result: No virus found in message 1KiFSd-0000yb-4Y. X-Scan-Signature: ch-smtp01.sth.basefarm.net 1KiFSd-0000yb-4Y 440cdeb0b2131089d68b0e75dd606b9d 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:104083 Archived-At: Stefan Monnier wrote: >>> It sounds like you want it first in the parent's mode hook. >> Yes, I think I fall for wishfull thinking there. >> That is some more lines to implement ;-) > > If you can arrange for all the relevant modes to derive from some new > `universal-parent-mode', then you just need to make it be first on > `universal-parent-mode-hook'. But I do not write most of the major modes. They come from all over the world ... I just implemented the code: ;; Save local variables before switching major (mumamo-save-most-buffer-locals major-mode) ;; Restore local variables after switching, but do it in the ;; greatest ancestor's mode hook (see `run-mode-hooks'): (let (ancestor-hook-sym parent-hook-sym (parent major-mode) (restore-fun (lambda () (mumamo-restore-most-buffer-locals major)))) ;; We want the greatest ancestor's mode hook: (setq parent-hook-sym (intern-soft (concat (symbol-name parent) "-hook"))) (when parent-hook-sym (setq ancestor-hook-sym parent-hook-sym)) (while (get parent 'derived-mode-parent) (setq parent (get parent 'derived-mode-parent)) (setq parent-hook-sym (intern-soft (concat (symbol-name parent) "-hook"))) (when parent-hook-sym (setq ancestor-hook-sym parent-hook-sym))) (when ancestor-hook-sym ;; Put first in local hook to run it first: (add-hook ancestor-hook-sym restore-fun nil t)) (funcall major) ;; <-------------- Change major mode here (if (not ancestor-hook-sym) (mumamo-restore-most-buffer-locals major) (remove-hook ancestor-hook-sym restore-fun t)))