From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Alan Mackenzie Newsgroups: gmane.emacs.devel Subject: Re: New major mode using cc-mode => cc-mode intrudes unrelated modes Date: Mon, 16 Jul 2007 23:42:32 +0100 Message-ID: <20070716224232.GA14029@muc.de> References: <87wsxpw62h.fsf@turing.ravneholm26.dk> NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Trace: sea.gmane.org 1184620446 4656 80.91.229.12 (16 Jul 2007 21:14:06 GMT) X-Complaints-To: usenet@sea.gmane.org NNTP-Posting-Date: Mon, 16 Jul 2007 21:14:06 +0000 (UTC) Cc: Vagn Johansen , Richard Stallman , emacs-devel@gnu.org To: Jens Peter Secher Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Mon Jul 16 23:14:04 2007 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 1IAXtL-0008NN-Dv for ged-emacs-devel@m.gmane.org; Mon, 16 Jul 2007 23:14:03 +0200 Original-Received: from localhost ([127.0.0.1] helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1IAXtK-0000dM-M5 for ged-emacs-devel@m.gmane.org; Mon, 16 Jul 2007 17:14:02 -0400 Original-Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1IAXtG-0000cs-TY for emacs-devel@gnu.org; Mon, 16 Jul 2007 17:13:58 -0400 Original-Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1IAXtF-0000cW-8X for emacs-devel@gnu.org; Mon, 16 Jul 2007 17:13:58 -0400 Original-Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1IAXtF-0000cN-23 for emacs-devel@gnu.org; Mon, 16 Jul 2007 17:13:57 -0400 Original-Received: from colin.muc.de ([193.149.48.1] helo=mail.muc.de) by monty-python.gnu.org with esmtps (TLS-1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1IAXtE-0000jl-7C for emacs-devel@gnu.org; Mon, 16 Jul 2007 17:13:56 -0400 Original-Received: (qmail 95209 invoked by uid 3782); 16 Jul 2007 21:13:50 -0000 Original-Received: from acm.muc.de (p54A3D972.dip.t-dialin.net [84.163.217.114]) by colin2.muc.de (tmda-ofmipd) with ESMTP; Mon, 16 Jul 2007 23:13:47 +0200 Original-Received: (qmail 22600 invoked by uid 1000); 16 Jul 2007 22:42:32 -0000 Content-Disposition: inline In-Reply-To: <87wsxpw62h.fsf@turing.ravneholm26.dk> User-Agent: Mutt/1.5.9i X-Delivery-Agent: TMDA/1.1.5 (Fettercairn) X-Primary-Address: acm@muc.de X-detected-kernel: FreeBSD 4.6-4.9 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:74925 Archived-At: Hi, Jens. On Wed, Jun 27, 2007 at 09:28:06PM +0200, Jens Peter Secher wrote: > I have been trying to create a major mode for a programming language > called haXe, but I have run into problems. haxe-mode is basically just > a cut-down version of java-mode, as you can see from the first attached > file. A quick observation here: I think you will need to make your file GPL licensed before you release it, since it will be a derivative of Emacs, a GPL program. But RMS is the expert on this. > The problems is that, efter putting a buffer in haxe-mode, cc-mode > functions intrude into others modes, eg. lisp-mode. More specifically, > after visiting the haxe-mode test file in the second attachment, a newly > created lisp-mode buffer will have eg. beginning-of-defun-function set > to c-beginning-of-defun. > Another strange thing is that I have to set comment-start-skip > explicitly in haxe-mode, otherwise it gets a nil value when visiting > haxe-mode files. > So obviously I am doing something wrong, but I cannot figure out what. No, on the contrary, I've done something wrong. ;-) There's a macro c-make-emacs-variables-local, which does what its name says on the five variables: comment-start, comment-end, comment-start-skip, beginning-of-defun-function, and end-of-defun-function. I had put this macro call in a position which worked only for C, C++, ...., Pike, AWK, but not for derived modes. > I am using Emacs 22.0.99.1 (including cc-mode 5.31.4). Would you please try this patch out, and let me know whether it fixes everything. Thanks for taking the trouble to report this bug, and thanks for making it so easy for me to track down. 2007-07-16 Alan Mackenzie * progmodes/cc-mode.el (c-init-language-vars-for): * progmodes/cc-langs.el (c-make-init-lang-vars-fun): Move the invocation of c-make-emacs-variables-local from the former function to the latter, because derived modes bypass the former. Index: cc-mode.el =================================================================== RCS file: /cvsroot/emacs/emacs/lisp/progmodes/cc-mode.el,v retrieving revision 1.58.2.2 diff -c -r1.58.2.2 cc-mode.el *** cc-mode.el 20 Jun 2007 08:27:53 -0000 1.58.2.2 --- cc-mode.el 16 Jul 2007 20:50:17 -0000 *************** *** 168,174 **** `c-init-language-vars' macro if the language you want to use is one of those, rather than a derived language defined through the language variable system (see \"cc-langs.el\")." - (c-make-emacs-variables-local) (cond ((eq mode 'c-mode) (c-init-language-vars c-mode)) ((eq mode 'c++-mode) (c-init-language-vars c++-mode)) ((eq mode 'objc-mode) (c-init-language-vars objc-mode)) --- 168,173 ---- Index: cc-langs.el =================================================================== RCS file: /cvsroot/emacs/emacs/lisp/progmodes/cc-langs.el,v retrieving revision 1.47 diff -c -r1.47 cc-langs.el *** cc-langs.el 9 Apr 2007 10:51:29 -0000 1.47 --- cc-langs.el 16 Jul 2007 20:50:29 -0000 *************** *** 2898,2903 **** --- 2898,2904 ---- ;; that could be in the result from `cl-macroexpand-all'. (let ((c-buffer-is-cc-mode ',mode) current-var source-eval) + (c-make-emacs-variables-local) (condition-case err (if (eq c-version-sym ',c-version-sym) *************** *** 2956,2961 **** --- 2957,2963 ---- (init (append (cdr c-emacs-variable-inits) (cdr c-lang-variable-inits))) current-var) + (c-make-emacs-variables-local) (condition-case err (while init > Cheers, > -- > Jens Peter Secher. -- Alan Mackenzie (Ittersbach, Germany).