From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Lute Kamstra Newsgroups: gmane.emacs.devel Subject: Re: Splitting and moving generic.el. Date: Tue, 05 Apr 2005 20:58:14 +0200 Message-ID: <87psx9capl.fsf@xs4all.nl> References: <878y45sdxi.fsf@xs4all.nl> NNTP-Posting-Host: main.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Trace: sea.gmane.org 1112727926 16027 80.91.229.2 (5 Apr 2005 19:05:26 GMT) X-Complaints-To: usenet@sea.gmane.org NNTP-Posting-Date: Tue, 5 Apr 2005 19:05:26 +0000 (UTC) Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Tue Apr 05 21:05:22 2005 Return-path: Original-Received: from lists.gnu.org ([199.232.76.165]) by ciao.gmane.org with esmtp (Exim 4.43) id 1DItL2-0000uu-19 for ged-emacs-devel@m.gmane.org; Tue, 05 Apr 2005 21:03:48 +0200 Original-Received: from localhost ([127.0.0.1] helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1DIsna-00038Z-OE for ged-emacs-devel@m.gmane.org; Tue, 05 Apr 2005 14:29:14 -0400 Original-Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1DIsn7-00032c-1k for emacs-devel@gnu.org; Tue, 05 Apr 2005 14:28:45 -0400 Original-Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1DIsn1-0002yW-Kz for emacs-devel@gnu.org; Tue, 05 Apr 2005 14:28:41 -0400 Original-Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1DIsn1-0002y8-Hn for emacs-devel@gnu.org; Tue, 05 Apr 2005 14:28:39 -0400 Original-Received: from [194.109.24.25] (helo=smtp-vbr5.xs4all.nl) by monty-python.gnu.org with esmtp (Exim 4.34) id 1DItFv-0002Ef-0c for emacs-devel@gnu.org; Tue, 05 Apr 2005 14:58:31 -0400 Original-Received: from pijl (a80-127-67-124.adsl.xs4all.nl [80.127.67.124]) by smtp-vbr5.xs4all.nl (8.12.11/8.12.11) with ESMTP id j35IwFLU048893 for ; Tue, 5 Apr 2005 20:58:15 +0200 (CEST) (envelope-from Lute.Kamstra@xs4all.nl) Original-Received: from lute by pijl with local (Exim 3.36 #1 (Debian)) id 1DItFe-0003ha-00 for ; Tue, 05 Apr 2005 20:58:14 +0200 Original-To: emacs-devel@gnu.org In-Reply-To: <878y45sdxi.fsf@xs4all.nl> (Lute Kamstra's message of "Wed, 30 Mar 2005 11:03:53 +0200") User-Agent: Gnus/5.11 (Gnus v5.11) Emacs/22.0.50 (gnu/linux) Original-Lines: 358 X-Virus-Scanned: by XS4ALL Virus Scanner 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:35593 X-Report-Spam: http://spam.gmane.org/gmane.emacs.devel:35593 Lute Kamstra writes: > generic.el currently contains two facilities: > > 1. Defining major modes by means of define-generic-mode. > > 2. The definition of default-generic-mode and some setup code to use > it automatically for some files. > > I think 2. is a strange side-effect when you are using generic.el to > do 1. So I propose to move 2. to generic-x.el, where it is more > appropriate. The patch below implements this. Ok to commit? > And what about moving generic.el from lisp/ to lisp/emacs-lisp/? That > seems the appropriate location. Can I do this as well? Lute. 2005-04-05 Lute Kamstra * generic.el: Commentary section cleanup. (generic): Delete. (generic-use-find-file-hook, generic-lines-to-scan) (generic-find-file-regexp, generic-ignore-files-regexp) (default-generic-mode, generic-mode-find-file-hook) (generic-mode-ini-file-find-file-hook): Move to generic-x.el. * generic-x.el (generic-x): Docstring fix. Put it in the data group. (generic-use-find-file-hook, generic-lines-to-scan) (generic-find-file-regexp, generic-ignore-files-regexp) (default-generic-mode, generic-mode-find-file-hook) (generic-mode-ini-file-find-file-hook): Moved from generic.el. Index: lisp/generic.el =================================================================== RCS file: /cvsroot/emacs/emacs/lisp/generic.el,v retrieving revision 1.36 diff -u -r1.36 generic.el --- lisp/generic.el 5 Apr 2005 18:32:59 -0000 1.36 +++ lisp/generic.el 5 Apr 2005 18:42:38 -0000 @@ -23,16 +23,11 @@ ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. -;; Purpose: - -;; Meta-mode to create simple major modes -;; with basic comment and font-lock support - ;;; Commentary: ;; INTRODUCTION: - -;; Generic-mode is a meta-mode which can be used to define small modes +;; +;; The macro `define-generic-mode' can be used to define small modes ;; which provide basic comment and font-lock support. These modes are ;; intended for the many configuration files and such which are too ;; small for a "real" mode, but still have a regular syntax, comment @@ -68,20 +63,9 @@ ;; more than this, or you find yourself writing extensive customizations, ;; perhaps you should be writing a major mode instead! ;; -;; LOCAL VARIABLES: -;; -;; To put a file into generic mode using local variables, use a line -;; like this in a Local Variables block: +;; EXAMPLE: ;; -;; mode: default-generic -;; -;; Do NOT use "mode: generic"! -;; See also "AUTOMATICALLY ENTERING GENERIC MODE" below. -;; -;; DEFINING NEW GENERIC MODES: -;; -;; Use the `define-generic-mode' function to define new modes. -;; For example: +;; You can use `define-generic-mode' like this: ;; ;; (define-generic-mode 'foo-generic-mode ;; (list ?%) @@ -90,35 +74,24 @@ ;; (list "\\.FOO\\'") ;; (list 'foo-setup-function)) ;; -;; defines a new generic-mode `foo-generic-mode', which has '%' as a +;; to define a new generic-mode `foo-generic-mode', which has '%' as a ;; comment character, and "keyword" as a keyword. When files which ;; end in '.FOO' are loaded, Emacs will go into foo-generic-mode and ;; call foo-setup-function. You can also use the function ;; `foo-generic-mode' (which is interactive) to put a buffer into ;; foo-generic-mode. ;; -;; AUTOMATICALLY ENTERING GENERIC MODE: -;; -;; Generic-mode provides a hook which automatically puts a file into -;; default-generic-mode if the first few lines of a file in -;; fundamental mode start with a hash comment character. To disable -;; this functionality, set the variable `generic-use-find-file-hook' -;; to nil BEFORE loading generic-mode. See the variables -;; `generic-lines-to-scan' and `generic-find-file-regexp' for -;; customization options. -;; ;; GOTCHAS: ;; ;; Be careful that your font-lock definitions are correct. Getting ;; them wrong can cause Emacs to continually attempt to fontify! This ;; problem is not specific to generic-mode. -;; ;; Credit for suggestions, brainstorming, help with debugging: ;; ACorreir@pervasive-sw.com (Alfred Correira) ;; Extensive cleanup by: ;; Stefan Monnier (monnier+gnu/emacs@flint.cs.yale.edu) -;; + ;;; Code: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -138,47 +111,6 @@ instead (which see).") ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; Customization Variables -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - -(defgroup generic nil - "Define simple major modes with comment and font-lock support." - :prefix "generic-" - :group 'extensions) - -(defcustom generic-use-find-file-hook t - "*If non-nil, add a hook to enter `default-generic-mode' automatically. -This is done if the first few lines of a file in fundamental mode -start with a hash comment character." - :group 'generic - :type 'boolean) - -(defcustom generic-lines-to-scan 3 - "*Number of lines that `generic-mode-find-file-hook' looks at. -Relevant when deciding whether to enter Default-Generic mode automatically. -This variable should be set to a small positive number." - :group 'generic - :type 'integer) - -(defcustom generic-find-file-regexp "^#" - "*Regular expression used by `generic-mode-find-file-hook'. -Files in fundamental mode whose first few lines contain a match -for this regexp, should be put into Default-Generic mode instead. -The number of lines tested for the matches is specified by the -value of the variable `generic-lines-to-scan', which see." - :group 'generic - :type 'regexp) - -(defcustom generic-ignore-files-regexp "[Tt][Aa][Gg][Ss]\\'" - "*Regular expression used by `generic-mode-find-file-hook'. -Files whose names match this regular expression should not be put -into Default-Generic mode, even if they have lines which match -the regexp in `generic-find-file-regexp'. If the value is nil, -`generic-mode-find-file-hook' does not check the file names." - :group 'generic - :type '(choice (const :tag "Don't check file names" nil) regexp)) - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Functions ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -391,51 +323,6 @@ '((nil "^\\[\\(.*\\)\\]" 1)) imenu-case-fold-search t)) -;; This generic mode is always defined -(define-generic-mode default-generic-mode (list ?#) nil nil nil nil :group 'generic) - -;; A more general solution would allow us to enter generic-mode for -;; *any* comment character, but would require us to synthesize a new -;; generic-mode on the fly. I think this gives us most of what we -;; want. -(defun generic-mode-find-file-hook () - "Hook function to enter Default-Generic mode automatically. - -Done if the first few lines of a file in Fundamental mode start -with a match for the regexp in `generic-find-file-regexp', unless -the file's name matches the regexp which is the value of the -variable `generic-ignore-files-regexp'. - -This hook will be installed if the variable -`generic-use-find-file-hook' is non-nil. The variable -`generic-lines-to-scan' determines the number of lines to look at." - (when (and (eq major-mode 'fundamental-mode) - (or (null generic-ignore-files-regexp) - (not (string-match - generic-ignore-files-regexp - (file-name-sans-versions buffer-file-name))))) - (save-excursion - (goto-char (point-min)) - (when (re-search-forward generic-find-file-regexp - (save-excursion - (forward-line generic-lines-to-scan) - (point)) t) - (goto-char (point-min)) - (default-generic-mode))))) - -(defun generic-mode-ini-file-find-file-hook () - "Hook function to enter Default-Generic mode automatically for INI files. -Done if the first few lines of a file in Fundamental mode look like an -INI file. This hook is NOT installed by default." - (and (eq major-mode 'fundamental-mode) - (save-excursion - (goto-char (point-min)) - (and (looking-at "^\\s-*\\[.*\\]") - (ini-generic-mode))))) - -(and generic-use-find-file-hook - (add-hook 'find-file-hook 'generic-mode-find-file-hook)) - ;;;###autoload (defun generic-make-keywords-list (keywords-list face &optional prefix suffix) "Return a regular expression matching the specified KEYWORDS-LIST. Index: lisp/generic-x.el =================================================================== RCS file: /cvsroot/emacs/emacs/lisp/generic-x.el,v retrieving revision 1.29 diff -u -r1.29 generic-x.el --- lisp/generic-x.el 5 Apr 2005 18:33:50 -0000 1.29 +++ lisp/generic-x.el 5 Apr 2005 18:42:40 -0000 @@ -41,6 +41,16 @@ ;; You can also send in new modes; if the file types a reasonably common, ;; we would like to install them. ;; +;; DEFAULT GENERIC MODE: +;; +;; This file provides a hook which automatically puts a file into +;; `default-generic-mode' if the first few lines of a file in +;; fundamental mode start with a hash comment character. To disable +;; this functionality, set the variable `generic-use-find-file-hook' +;; to nil BEFORE loading generic-x. See the variables +;; `generic-lines-to-scan' and `generic-find-file-regexp' for +;; customization options. +;; ;; PROBLEMS WHEN USED WITH FOLDING MODE: ;; ;; [The following relates to the obsolete selective-display technique. @@ -95,11 +105,96 @@ (require 'font-lock) (defgroup generic-x nil - "Extra modes for generic mode." + "A collection of generic modes." :prefix "generic-" - :group 'generic + :group 'data :version "20.3") +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Default-Generic mode +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(defcustom generic-use-find-file-hook t + "*If non-nil, add a hook to enter `default-generic-mode' automatically. +This is done if the first few lines of a file in fundamental mode +start with a hash comment character." + :group 'generic-x + :type 'boolean) + +(defcustom generic-lines-to-scan 3 + "*Number of lines that `generic-mode-find-file-hook' looks at. +Relevant when deciding whether to enter Default-Generic mode automatically. +This variable should be set to a small positive number." + :group 'generic-x + :type 'integer) + +(defcustom generic-find-file-regexp "^#" + "*Regular expression used by `generic-mode-find-file-hook'. +Files in fundamental mode whose first few lines contain a match +for this regexp, should be put into Default-Generic mode instead. +The number of lines tested for the matches is specified by the +value of the variable `generic-lines-to-scan', which see." + :group 'generic-x + :type 'regexp) + +(defcustom generic-ignore-files-regexp "[Tt][Aa][Gg][Ss]\\'" + "*Regular expression used by `generic-mode-find-file-hook'. +Files whose names match this regular expression should not be put +into Default-Generic mode, even if they have lines which match +the regexp in `generic-find-file-regexp'. If the value is nil, +`generic-mode-find-file-hook' does not check the file names." + :group 'generic-x + :type '(choice (const :tag "Don't check file names" nil) regexp)) + +;; This generic mode is always defined +(define-generic-mode default-generic-mode (list ?#) nil nil nil nil :group 'generic) + +;; A more general solution would allow us to enter generic-mode for +;; *any* comment character, but would require us to synthesize a new +;; generic-mode on the fly. I think this gives us most of what we +;; want. +(defun generic-mode-find-file-hook () + "Hook function to enter Default-Generic mode automatically. + +Done if the first few lines of a file in Fundamental mode start +with a match for the regexp in `generic-find-file-regexp', unless +the file's name matches the regexp which is the value of the +variable `generic-ignore-files-regexp'. + +This hook will be installed if the variable +`generic-use-find-file-hook' is non-nil. The variable +`generic-lines-to-scan' determines the number of lines to look at." + (when (and (eq major-mode 'fundamental-mode) + (or (null generic-ignore-files-regexp) + (not (string-match + generic-ignore-files-regexp + (file-name-sans-versions buffer-file-name))))) + (save-excursion + (goto-char (point-min)) + (when (re-search-forward generic-find-file-regexp + (save-excursion + (forward-line generic-lines-to-scan) + (point)) t) + (goto-char (point-min)) + (default-generic-mode))))) + +(defun generic-mode-ini-file-find-file-hook () + "Hook function to enter Default-Generic mode automatically for INI files. +Done if the first few lines of a file in Fundamental mode look like an +INI file. This hook is NOT installed by default." + (and (eq major-mode 'fundamental-mode) + (save-excursion + (goto-char (point-min)) + (and (looking-at "^\\s-*\\[.*\\]") + (ini-generic-mode))))) + +(and generic-use-find-file-hook + (add-hook 'find-file-hook 'generic-mode-find-file-hook)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Other Generic modes +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + (defcustom generic-extras-enable-list nil "*List of generic modes to enable by default. Each entry in the list should be a symbol. The variables @@ -150,10 +245,6 @@ etc-fstab-generic-mode) generic-extras-enable-list))) -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; Generic-modes -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - ;;; Apache (when (memq 'apache-conf-generic-mode generic-extras-enable-list)