;;;; winmgr-mode.el --- generic window manager mode

;;; Author: David Konerding
;;; Maintainer: David Konerding (rafael@cse.ucsc.edu)
;;; Modifications by: Stefan Strobel <strobel@lia.univ-savoie.fr>
;;;                   Barry A. Warsaw <bwarsaw@cen.com>
;;; Created: 5/94

;;; This file is not part of GNU Emacs.

;;; This program is free software; you can redistribute it and/or modify
;;; it under the terms of the GNU General Public License as published by
;;; the Free Software Foundation; either version 2 of the License, or
;;; (at your option) any later version.
;;; 
;;; This program is distributed in the hope that it will be useful,
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
;;; GNU General Public License for more details.
;;; 
;;; You should have received a copy of the GNU General Public License
;;; along with this program; if not, write to the Free Software
;;; Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.

;;; LCD Archive Entry
;;; winmgr-mode|David Konerding|rafael@cse.ucsc.edu
;;; |Generic Window Manager Mode
;;; |$Date: 1994/05/13 14:14:37 $|$Revision: 1.4 $|

;;;; Commentary:

;;; This package is a major mode for editing window configuration files and
;;; also defines font-lock keywords for such files.

;;; winmgr-mode mode will automatically get turned on if you visit a
;;; a file whose name looks like that of a configuration file
;;; (IE, .fvwmrc, .mwmrc, .tvtwmrc, .ctwmrc, etc)

;;; The current font-lock keywords are:

;;; any word of upper or lower case letters at the start of a line
;;; followed by whitespace gets colored using
;;; font-lock-function-name-face.

;;; any word of upper or lower case letters at the start of a line
;;; followed by a "(" (IE, an m4 macro) gets colored using
;;; font-lock-m4-face

;; Put this in your .emacs :
;;
;;(setq auto-mode-alist
;;   (append '(("\\.[A-Za-z]*wm$" . winmgr-mode)
;;		("\\.[A-Za-z]*wmrc" . winmgr-mode)) 
;;	      auto-mode-alist)))
;;
;;(autoload 'winmgr-mode "winmgr-mode"
;;  "Mode for editing window manager config files")
;;
;;(add-hook 'winmgr-mode-hook
;;	  '(lambda ()
;;	     (font-lock-mode t)
;;	     (setq font-lock-keywords winmgr-font-lock-keywords)
;;           (font-lock-fontify-buffer)))
;;


;;; Code:
(defvar winmgr-mode-hook nil
  "Hook to be run when `winmgr-mode' is entered.")



;; font-lock-isms
(defvar font-lock-m4-face 'default
  "New face for m4 macros.")

(defun winmgr-init-font-lock ()
  ;; initialize font-lock faces for winmgr-mode
  (condition-case nil 
      (progn
	(copy-face 'default   'm4-face)
	(set-face-foreground  'm4-face "blue")
	(set-face-background  'm4-face "white")
	(setq font-lock-m4-face 'm4-face))
    (error nil)))

(defvar winmgr-font-lock-keywords 
  '(("^[A-Za-z]+[ \n\t]" . font-lock-function-name-face)
    ("^[ \n\t]+[A-Za-z]+[ \n\t]" . font-lock-keyword-face)
    ("^#.*" . font-lock-comment-face)
    ("^[A-Za-z]+(.*)" . font-lock-m4-face))
  "Default font-lock keywords.")



;; major-mode stuff
(defvar winmgr-mode-abbrev-table nil
  "Abbrev table used in `winmgr-mode' buffers.")
(define-abbrev-table 'winmgr-mode-abbrev-table ())


(defvar winmgr-mode-syntax-table nil
  "Syntax table used in `winmgr-mode' buffers.")
(if winmgr-mode-syntax-table
    ()
  (setq winmgr-mode-syntax-table (make-syntax-table))
  (modify-syntax-entry ?\#  "<" winmgr-mode-syntax-table)
  (modify-syntax-entry ?\n ">" winmgr-mode-syntax-table))


(defvar winmgr-mode-map ()
  "Keymap used in `winmgr-mode' buffers.")
(if winmgr-mode-map
    ()
  ;; So far there aren't any winmgr-mode specific functions
  )


(defun winmgr-mode ()
  "Major mode for editing winmgr config files"
  (interactive)
  (kill-all-local-variables)
  (set-syntax-table winmgr-mode-syntax-table)
  (setq major-mode 'winmgr-mode
	mode-name "Winmgr"
	local-abbrev-table winmgr-mode-abbrev-table)
  (use-local-map winmgr-mode-map)
  ;; local variables
  (make-local-variable 'parse-sexp-ignore-comments)
  (make-local-variable 'comment-start)
  (make-local-variable 'comment-end)
  ;; now set their values
  (setq parse-sexp-ignore-comments t
	comment-start "# "
	comment-end "")
  (run-hooks 'winmgr-mode-hook))



(provide 'winmgr-mode)
;;; winmgr-mode.el ends here

