Mercurial > hg > xemacs-beta
diff lisp/modes/winmgr-mode.el @ 100:4be1180a9e89 r20-1b2
Import from CVS: tag r20-1b2
author | cvs |
---|---|
date | Mon, 13 Aug 2007 09:15:11 +0200 |
parents | 4103f0995bd7 |
children | 5a88923fcbfe |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/modes/winmgr-mode.el Mon Aug 13 09:15:11 2007 +0200 @@ -0,0 +1,165 @@ +;;; winmgr-mode.el --- generic window manager mode + +;; Author: ??? +;; Maintainer: David Konerding (rafael@cse.ucsc.edu) +;; Modifications by: Stefan Strobel <strobel@lia.univ-savoie.fr> +;; Barry A. Warsaw <bwarsaw@python.org> +;; Created: ??? +;; Keywords: languages + +;; Copyright (C) 199? Someone Claim It + +;; This file is part of XEmacs. + +;; XEmacs 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. + +;; XEmacs 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 XEmacs; if not, write to the Free Software +;; Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +;; 02111-1307, USA. + +;;; Synched up with: Not in FSF. + +;;; 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, 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-comment-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.") + +(defvar winmgr-basic-offset 4 + "*Number of spaces per indentation level.") + + +;; 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) + ;;("^#.*" . 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 + () + (setq winmgr-mode-map (make-sparse-keymap)) + ;; 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) + (make-local-variable 'indent-line-function) + ;; now set their values + (setq parse-sexp-ignore-comments t + comment-start "# " + comment-end "" + indent-line-function 'winmgr-indent-line-function) + (run-hooks 'winmgr-mode-hook)) + + +;; indentation commands + +(defun winmgr-indent-line-function () + "Indent line based on depth in parentheses. +See the variable `winmgr-basic-offset.'" + ;; find the beginning of this construct + (let ((depth 0) + (here (point))) + (condition-case nil + (while t + (backward-up-list 1) + (setq depth (1+ depth))) + (error nil)) + (goto-char here) + (beginning-of-line) + (delete-horizontal-space) + (insert-char ?\040 (* depth winmgr-basic-offset)))) + + +(provide 'winmgr-mode) + +;;; winmgr-mode.el ends here