From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Stefan Monnier Newsgroups: gmane.emacs.devel Subject: Reify the cc-mode-common into an actual parent mode Date: Mon, 23 May 2016 20:41:56 -0400 Message-ID: NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: text/plain X-Trace: ger.gmane.org 1464050541 31579 80.91.229.3 (24 May 2016 00:42:21 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Tue, 24 May 2016 00:42:21 +0000 (UTC) Cc: emacs-devel@gnu.org To: bug-cc-mode@gnu.org Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Tue May 24 02:42:13 2016 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1b50QG-0002uh-QN for ged-emacs-devel@m.gmane.org; Tue, 24 May 2016 02:42:13 +0200 Original-Received: from localhost ([::1]:50992 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1b50QF-0005KT-SF for ged-emacs-devel@m.gmane.org; Mon, 23 May 2016 20:42:11 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:55567) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1b50Q7-0005K7-96 for emacs-devel@gnu.org; Mon, 23 May 2016 20:42:05 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1b50Q3-0005pT-0i for emacs-devel@gnu.org; Mon, 23 May 2016 20:42:02 -0400 Original-Received: from chene.dit.umontreal.ca ([132.204.246.20]:55865) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1b50Q2-0005pO-RR; Mon, 23 May 2016 20:41:58 -0400 Original-Received: from fmsmemgm.homelinux.net (lechon.iro.umontreal.ca [132.204.27.242]) by chene.dit.umontreal.ca (8.14.7/8.14.1) with ESMTP id u4O0fvQB020304; Mon, 23 May 2016 20:41:57 -0400 Original-Received: by fmsmemgm.homelinux.net (Postfix, from userid 20848) id 00C2AAE22F; Mon, 23 May 2016 20:41:56 -0400 (EDT) User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/25.1.50 (gnu/linux) X-NAI-Spam-Flag: NO X-NAI-Spam-Threshold: 5 X-NAI-Spam-Score: 0 X-NAI-Spam-Rules: 1 Rules triggered RV5681=0 X-NAI-Spam-Version: 2.3.0.9418 : core <5681> : inlines <4848> : streams <1640298> : uri <2215750> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 132.204.246.20 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Original-Sender: "Emacs-devel" Xref: news.gmane.org gmane.emacs.devel:203973 Archived-At: IIRC last conversation, while you disagreed with introducing a c-derivative-mode (for objc/c++/c), you said you were OK with the idea of introducing a cc-mode-common. Here's a corresponding patch. Any objection? Stefan diff --git a/lisp/progmodes/cc-mode.el b/lisp/progmodes/cc-mode.el index de903b8..bbb96f2 100644 --- a/lisp/progmodes/cc-mode.el +++ b/lisp/progmodes/cc-mode.el @@ -238,6 +238,8 @@ control). See \"cc-mode.el\" for more info." ;; incompatible (t (error "CC Mode is incompatible with this version of Emacs"))) map)) +(make-obsolete 'c-make-inherited-keymap + "Use make-sparse-keymap + (set-keymap-parent c-mode-base-map); or derive from c-mode-common" "26.1") (defun c-define-abbrev-table (name defs &optional doc) ;; Compatibility wrapper for `define-abbrev' which passes a non-nil @@ -861,6 +863,7 @@ Note that the style variables are always made local to the buffer." (if (cc-bytecomp-fboundp 'run-mode-hooks) `(run-mode-hooks ,@hooks) `(progn ,@(mapcar (lambda (hook) `(run-hooks ,hook)) hooks)))) +(make-obsolete 'c-run-mode-hooks "derive your mode from c-common-mode" "26.1") ;;; Change hooks, linking with Font Lock and electric-indent-mode. @@ -1431,6 +1434,17 @@ This function is called from `c-common-init', once per mode initialization." (c-update-modeline))) +(defvar c-mode-common-map c-mode-base-map) + +(define-derived-mode c-mode-common prog-mode "CC-common" + "Pseudo major mode, parent of all modes using the CC engine." + ;; We want to update the mode-line but *after* the major mode's hooks + ;; have been run. + :after-hook (c-update-modeline) + (c-initialize-cc-mode t) + (setq abbrev-mode t) ;; Used for c-electric-continued-statement! + ) + ;; Support for C (defvar c-mode-syntax-table @@ -1443,7 +1457,7 @@ This function is called from `c-common-init', once per mode initialization." "Abbreviation table used in c-mode buffers.") (defvar c-mode-map - (let ((map (c-make-inherited-keymap))) + (let ((map (make-sparse-keymap))) ;; Add bindings which are only useful for C. (define-key map "\C-c\C-e" 'c-macro-expand) map) @@ -1484,7 +1498,7 @@ This function is called from `c-common-init', once per mode initialization." (unless (fboundp 'prog-mode) (defalias 'prog-mode 'fundamental-mode)) ;;;###autoload -(define-derived-mode c-mode prog-mode "C" +(define-derived-mode c-mode c-mode-common "C" "Major mode for editing C code. To submit a problem report, enter `\\[c-submit-bug-report]' from a @@ -1500,15 +1514,11 @@ initialization, then `c-mode-hook'. Key bindings: \\{c-mode-map}" :after-hook (progn (c-make-noise-macro-regexps) - (c-make-macro-with-semi-re) - (c-update-modeline)) - (c-initialize-cc-mode t) - (setq abbrev-mode t) + (c-make-macro-with-semi-re)) (c-init-language-vars-for 'c-mode) (c-common-init 'c-mode) (easy-menu-add c-c-menu) - (cc-imenu-init cc-imenu-c-generic-expression) - (c-run-mode-hooks 'c-mode-common-hook)) + (cc-imenu-init cc-imenu-c-generic-expression)) ;; Support for C++ @@ -1524,7 +1534,7 @@ Key bindings: "Abbreviation table used in c++-mode buffers.") (defvar c++-mode-map - (let ((map (c-make-inherited-keymap))) + (let ((map (make-sparse-keymap))) ;; Add bindings which are only useful for C++. (define-key map "\C-c\C-e" 'c-macro-expand) (define-key map "\C-c:" 'c-scope-operator) @@ -1537,7 +1547,7 @@ Key bindings: (cons "C++" (c-lang-const c-mode-menu c++))) ;;;###autoload -(define-derived-mode c++-mode prog-mode "C++" +(define-derived-mode c++-mode c-mode-common "C++" "Major mode for editing C++ code. To submit a problem report, enter `\\[c-submit-bug-report]' from a c++-mode buffer. This automatically sets up a mail buffer with @@ -1553,15 +1563,11 @@ initialization, then `c++-mode-hook'. Key bindings: \\{c++-mode-map}" :after-hook (progn (c-make-noise-macro-regexps) - (c-make-macro-with-semi-re) - (c-update-modeline)) - (c-initialize-cc-mode t) - (setq abbrev-mode t) + (c-make-macro-with-semi-re)) (c-init-language-vars-for 'c++-mode) (c-common-init 'c++-mode) (easy-menu-add c-c++-menu) - (cc-imenu-init cc-imenu-c++-generic-expression) - (c-run-mode-hooks 'c-mode-common-hook)) + (cc-imenu-init cc-imenu-c++-generic-expression)) ;; Support for Objective-C @@ -1576,7 +1582,7 @@ Key bindings: "Abbreviation table used in objc-mode buffers.") (defvar objc-mode-map - (let ((map (c-make-inherited-keymap))) + (let ((map (make-sparse-keymap))) ;; Add bindings which are only useful for Objective-C. (define-key map "\C-c\C-e" 'c-macro-expand) map) @@ -1588,7 +1594,7 @@ Key bindings: ;;;###autoload (add-to-list 'auto-mode-alist '("\\.m\\'" . objc-mode)) ;;;###autoload -(define-derived-mode objc-mode prog-mode "ObjC" +(define-derived-mode objc-mode c-mode-common "ObjC" "Major mode for editing Objective C code. To submit a problem report, enter `\\[c-submit-bug-report]' from an objc-mode buffer. This automatically sets up a mail buffer with @@ -1604,15 +1610,11 @@ initialization, then `objc-mode-hook'. Key bindings: \\{objc-mode-map}" :after-hook (progn (c-make-noise-macro-regexps) - (c-make-macro-with-semi-re) - (c-update-modeline)) - (c-initialize-cc-mode t) - (setq abbrev-mode t) + (c-make-macro-with-semi-re)) (c-init-language-vars-for 'objc-mode) (c-common-init 'objc-mode) (easy-menu-add c-objc-menu) - (cc-imenu-init nil 'cc-imenu-objc-function) - (c-run-mode-hooks 'c-mode-common-hook)) + (cc-imenu-init nil 'cc-imenu-objc-function)) ;; Support for Java @@ -1629,7 +1631,7 @@ Key bindings: "Abbreviation table used in java-mode buffers.") (defvar java-mode-map - (let ((map (c-make-inherited-keymap))) + (let ((map (make-sparse-keymap))) ;; Add bindings which are only useful for Java. map) "Keymap used in java-mode buffers.") @@ -1647,7 +1649,7 @@ Key bindings: ;;;###autoload (add-to-list 'auto-mode-alist '("\\.java\\'" . java-mode)) ;;;###autoload -(define-derived-mode java-mode prog-mode "Java" +(define-derived-mode java-mode c-mode-common "Java" "Major mode for editing Java code. To submit a problem report, enter `\\[c-submit-bug-report]' from a java-mode buffer. This automatically sets up a mail buffer with @@ -1662,14 +1664,10 @@ initialization, then `java-mode-hook'. Key bindings: \\{java-mode-map}" - :after-hook (c-update-modeline) - (c-initialize-cc-mode t) - (setq abbrev-mode t) (c-init-language-vars-for 'java-mode) (c-common-init 'java-mode) (easy-menu-add c-java-menu) - (cc-imenu-init cc-imenu-java-generic-expression) - (c-run-mode-hooks 'c-mode-common-hook)) + (cc-imenu-init cc-imenu-java-generic-expression)) ;; Support for CORBA's IDL language @@ -1682,7 +1680,7 @@ Key bindings: "Abbreviation table used in idl-mode buffers.") (defvar idl-mode-map - (let ((map (c-make-inherited-keymap))) + (let ((map (make-sparse-keymap))) ;; Add bindings which are only useful for IDL. map) "Keymap used in idl-mode buffers.") @@ -1693,7 +1691,7 @@ Key bindings: ;;;###autoload (add-to-list 'auto-mode-alist '("\\.idl\\'" . idl-mode)) ;;;###autoload -(define-derived-mode idl-mode prog-mode "IDL" +(define-derived-mode idl-mode c-mode-common "IDL" "Major mode for editing CORBA's IDL, PSDL and CIDL code. To submit a problem report, enter `\\[c-submit-bug-report]' from an idl-mode buffer. This automatically sets up a mail buffer with @@ -1708,13 +1706,13 @@ initialization, then `idl-mode-hook'. Key bindings: \\{idl-mode-map}" - :after-hook (c-update-modeline) - (c-initialize-cc-mode t) + ;; No c-electric-continued-statement here, so we don't need abbrev-mode. + (kill-local-variable 'abbrev-mode) (c-init-language-vars-for 'idl-mode) (c-common-init 'idl-mode) (easy-menu-add c-idl-menu) ;;(cc-imenu-init cc-imenu-idl-generic-expression) ;TODO - (c-run-mode-hooks 'c-mode-common-hook)) + ) ;; Support for Pike @@ -1729,7 +1727,7 @@ Key bindings: "Abbreviation table used in pike-mode buffers.") (defvar pike-mode-map - (let ((map (c-make-inherited-keymap))) + (let ((map (make-sparse-keymap))) ;; Additional bindings. (define-key map "\C-c\C-e" 'c-macro-expand) map) @@ -1742,7 +1740,7 @@ Key bindings: ;;;###autoload (add-to-list 'interpreter-mode-alist '("pike" . pike-mode)) ;;;###autoload -(define-derived-mode pike-mode prog-mode "Pike" +(define-derived-mode pike-mode c-mode-common "Pike" "Major mode for editing Pike code. To submit a problem report, enter `\\[c-submit-bug-report]' from a pike-mode buffer. This automatically sets up a mail buffer with @@ -1757,14 +1755,11 @@ initialization, then `pike-mode-hook'. Key bindings: \\{pike-mode-map}" - :after-hook (c-update-modeline) - (c-initialize-cc-mode t) - (setq abbrev-mode t) (c-init-language-vars-for 'pike-mode) (c-common-init 'pike-mode) (easy-menu-add c-pike-menu) ;;(cc-imenu-init cc-imenu-pike-generic-expression) ;TODO - (c-run-mode-hooks 'c-mode-common-hook)) + ) ;; Support for AWK @@ -1781,7 +1776,7 @@ Key bindings: "Abbreviation table used in awk-mode buffers.") (defvar awk-mode-map - (let ((map (c-make-inherited-keymap))) + (let ((map (make-sparse-keymap))) ;; Add bindings which are only useful for awk. (define-key map "#" 'self-insert-command);Overrides electric parent binding. (define-key map "/" 'self-insert-command);Overrides electric parent binding. @@ -1804,7 +1799,7 @@ Key bindings: (declare-function c-awk-unstick-NL-prop "cc-awk" ()) ;;;###autoload -(define-derived-mode awk-mode prog-mode "AWK" +(define-derived-mode awk-mode c-mode-common "AWK" "Major mode for editing AWK code. To submit a problem report, enter `\\[c-submit-bug-report]' from an awk-mode buffer. This automatically sets up a mail buffer with version @@ -1818,18 +1813,14 @@ initialization, then `awk-mode-hook'. Key bindings: \\{awk-mode-map}" - :after-hook (c-update-modeline) ;; We need the next line to stop the macro defining ;; `awk-mode-syntax-table'. This would mask the real table which is ;; declared in cc-awk.el and hasn't yet been loaded. :syntax-table nil (require 'cc-awk) ; Added 2003/6/10. - (c-initialize-cc-mode t) - (setq abbrev-mode t) (c-init-language-vars-for 'awk-mode) (c-common-init 'awk-mode) - (c-awk-unstick-NL-prop) - (c-run-mode-hooks 'c-mode-common-hook)) + (c-awk-unstick-NL-prop)) ;; bug reporting