-;;; -*-emacs-lisp-*-
-;;;
-;;; $Id$
+;;; -*- mode: emacs-lisp; coding: utf-8 -*-
;;;
;;; Functions and macros for .emacs
;;;
;;; 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+;;;----- Check command-line -------------------------------------------------
+
+(defvar mdw-fast-startup nil
+ "Whether .emacs should optimize for rapid startup.
+This may be at the expense of cool features.")
+(let ((probe nil) (next command-line-args))
+ (while next
+ (cond ((string= (car next) "--mdw-fast-startup")
+ (setq mdw-fast-startup t)
+ (if probe
+ (rplacd probe (cdr next))
+ (setq command-line-args (cdr next))))
+ (t
+ (setq probe next)))
+ (setq next (cdr next))))
+
;;;----- Some general utilities ---------------------------------------------
+(eval-when-compile
+ (unless (fboundp 'make-regexp)
+ (load "make-regexp"))
+ (require 'cl))
+
+(defmacro mdw-regexps (&rest list)
+ "Turn a LIST of strings into a single regular expression at compile-time."
+ `',(make-regexp list))
+
;; --- Some error trapping ---
;;
;; If individual bits of this file go tits-up, we don't particularly want
"Execute FORMS without allowing errors to propagate outside."
`(condition-case err
,(if (cdr forms) (cons 'progn forms) (car forms))
- (error (message "Error (trapped): %s" (error-message-string err)))))
+ (error (message "Error (trapped): %s in %s"
+ (error-message-string err)
+ ',forms))))
;; --- Configuration reading ---
(defun mdw-config (sym)
"Read the configuration variable named SYM."
(unless mdw-config
- (setq mdw-config (with-temp-buffer
- (insert-file-contents "~/.mdw.conf")
- (replace-regexp "^[ \t]*\\(#.*\\|\\)\n" ""
- nil (point-min) (point-max))
- (replace-regexp (concat "^[ \t]*"
- "\\([-a-zA-Z0-9_.]*\\)"
- "[ \t]*=[ \t]*"
- "\\(.*[^ \t\n]\\|\\)"
- "[ \t]**\\(\n\\|$\\)")
- "(\\1 . \"\\2\") "
- nil (point-min) (point-max))
- (car (read-from-string
- (concat "(" (buffer-string) ")"))))))
+ (setq mdw-config
+ (flet ((replace (what with)
+ (goto-char (point-min))
+ (while (re-search-forward what nil t)
+ (replace-match with t))))
+ (with-temp-buffer
+ (insert-file-contents "~/.mdw.conf")
+ (replace "^[ \t]*\\(#.*\\|\\)\n" "")
+ (replace (concat "^[ \t]*"
+ "\\([-a-zA-Z0-9_.]*\\)"
+ "[ \t]*=[ \t]*"
+ "\\(.*[^ \t\n]\\|\\)"
+ "[ \t]**\\(\n\\|$\\)")
+ "(\\1 . \"\\2\")\n")
+ (car (read-from-string
+ (concat "(" (buffer-string) ")")))))))
(cdr (assq sym mdw-config)))
+;; --- Is an Emacs library available? ---
+
+(defun library-exists-p (name)
+ "Return non-nil if NAME.el (or NAME.elc) is somewhere on the Emacs load
+path. The non-nil value is the filename we found for the library."
+ (let ((path load-path) elt (foundp nil))
+ (while (and path (not foundp))
+ (setq elt (car path))
+ (setq path (cdr path))
+ (setq foundp (or (let ((file (concat elt "/" name ".elc")))
+ (and (file-exists-p file) file))
+ (let ((file (concat elt "/" name ".el")))
+ (and (file-exists-p file) file)))))
+ foundp))
+
+(defun maybe-autoload (symbol file &optional docstring interactivep type)
+ "Set an autoload if the file actually exists."
+ (and (library-exists-p file)
+ (autoload symbol file docstring interactivep type)))
+
;; --- Splitting windows ---
-(defconst mdw-scrollbar-width (if window-system 6 1)
- "Guessed width of scroll bar.")
-(defun mdw-divvy-window (&optional w)
+(unless (fboundp 'scroll-bar-columns)
+ (defun scroll-bar-columns (side)
+ (cond ((eq side 'left) 0)
+ (window-system 3)
+ (t 1))))
+(unless (fboundp 'fringe-columns)
+ (defun fringe-columns (side)
+ (cond ((not window-system) 0)
+ ((eq side 'left) 1)
+ (t 2))))
+
+(defun mdw-divvy-window (&optional width)
"Split a wide window into appropriate widths."
- (interactive)
- (or w (setq w 78))
- (let ((win (selected-window))
- (c (/ (+ (window-width) mdw-scrollbar-width)
- (+ w mdw-scrollbar-width))))
+ (interactive "P")
+ (setq width (cond (width (prefix-numeric-value width))
+ ((and window-system
+ (>= emacs-major-version 22))
+ 77)
+ (t 78)))
+ (let* ((win (selected-window))
+ (sb-width (if (not window-system)
+ 1
+ (let ((tot 0))
+ (dolist (what '(scroll-bar fringe))
+ (dolist (side '(left right))
+ (incf tot
+ (funcall (intern (concat (symbol-name what)
+ "-columns"))
+ side))))
+ tot)))
+ (c (/ (+ (window-width) sb-width)
+ (+ width sb-width))))
(while (> c 1)
(setq c (1- c))
- (split-window-horizontally (+ w mdw-scrollbar-width))
+ (split-window-horizontally (+ width sb-width))
(other-window 1))
(select-window win)))
;;;----- Utility functions --------------------------------------------------
+(or (fboundp 'line-number-at-pos)
+ (defun line-number-at-pos (&optional pos)
+ (let ((opoint (or pos (point))) start)
+ (save-excursion
+ (save-restriction
+ (goto-char (point-min))
+ (widen)
+ (forward-line 0)
+ (setq start (point))
+ (goto-char opoint)
+ (forward-line 0)
+ (1+ (count-lines 1 (point))))))))
+
;; --- mdw-uniquify-alist ---
(defun mdw-uniquify-alist (&rest alists)
(interactive)
(save-excursion
(or arg (progn
- (goto-char (point-max))
+ (goto-char (point-max))
(insert "\nNP: ")
- (insert-file np-file)))))
-
-(trap
- (require 'tramp)
- (require 'autorevert)
- (defun mdw-check-autorevert ()
- (if (and (buffer-file-name)
- (tramp-tramp-file-p (buffer-file-name)))
- (unless global-auto-revert-ignore-buffer
- (setq global-auto-revert-ignore-buffer 'tramp))
- (if (eq global-auto-revert-ignore-buffer 'tramp)
- (setq global-auto-revert-ignore-buffer nil))))
- (defadvice find-file (after mdw-autorevert activate)
- (mdw-check-autorevert))
- (defadvice write-file (after mdw-autorevert activate)
- (mdw-check-autorevert)))
+ (insert-file-contents np-file)))))
+
+(defun mdw-check-autorevert ()
+ "Sets global-auto-revert-ignore-buffer appropriately for this buffer,
+taking into consideration whether it's been found using tramp, which seems to
+get itself into a twist."
+ (cond ((not (boundp 'global-auto-revert-ignore-buffer))
+ nil)
+ ((and (buffer-file-name)
+ (fboundp 'tramp-tramp-file-p)
+ (tramp-tramp-file-p (buffer-file-name)))
+ (unless global-auto-revert-ignore-buffer
+ (setq global-auto-revert-ignore-buffer 'tramp)))
+ ((eq global-auto-revert-ignore-buffer 'tramp)
+ (setq global-auto-revert-ignore-buffer nil))))
+
+(defadvice find-file (after mdw-autorevert activate)
+ (mdw-check-autorevert))
+(defadvice write-file (after mdw-autorevert activate)
+ (mdw-check-autorevert))
(defun mdwmail-mode ()
"Major mode for editing news and mail messages from external programs
(setq local-abbrev-table text-mode-abbrev-table)
(setq major-mode 'mdwmail-mode)
(setq mode-name "[mdw] mail")
+ (set-buffer-file-coding-system 'utf-8)
(make-local-variable 'paragraph-separate)
(make-local-variable 'paragraph-start)
(setq paragraph-start (concat "[ \t]*[-_][-_][-_]+$\\|^-- \\|-----\\|"
(perform-replace "\n-- \n" "\n-- " nil nil nil)))
(add-hook 'mail-setup-hook 'mdwmail-mangle-signature)
+;;;----- Dired hacking ------------------------------------------------------
+
+(defadvice dired-maybe-insert-subdir
+ (around mdw-marked-insertion first activate)
+ "The DIRNAME may be a list of directory names to insert. Interactively, if
+files are marked, then insert all of them. With a numeric prefix argument,
+select that many entries near point; with a non-numeric prefix argument,
+prompt for listing options."
+ (interactive
+ (list (dired-get-marked-files nil
+ (and (integerp current-prefix-arg)
+ current-prefix-arg)
+ #'file-directory-p)
+ (and current-prefix-arg
+ (not (integerp current-prefix-arg))
+ (read-string "Switches for listing: "
+ (or dired-subdir-switches
+ dired-actual-switches)))))
+ (let ((dirs (ad-get-arg 0)))
+ (dolist (dir (if (listp dirs) dirs (list dirs)))
+ (ad-set-arg 0 dir)
+ ad-do-it)))
+
+;;;----- URL viewing --------------------------------------------------------
+
+(defun mdw-w3m-browse-url (url &optional new-session-p)
+ "Invoke w3m on the URL in its current window, or at least a different one.
+If NEW-SESSION-P, start a new session."
+ (interactive "sURL: \nP")
+ (save-excursion
+ (let ((window (selected-window)))
+ (unwind-protect
+ (progn
+ (select-window (or (and (not new-session-p)
+ (get-buffer-window "*w3m*"))
+ (progn
+ (if (one-window-p t) (split-window))
+ (get-lru-window))))
+ (w3m-browse-url url new-session-p))
+ (select-window window)))))
+
+(defvar mdw-good-url-browsers
+ '((w3m . mdw-w3m-browse-url)
+ browse-url-w3
+ browse-url-mozilla)
+ "List of good browsers for mdw-good-url-browsers; each item is a browser
+function name, or a cons (CHECK . FUNC). A symbol FOO stands for (FOO
+. FOO).")
+
+(defun mdw-good-url-browser ()
+ "Return a good URL browser. Trundle the list of such things, finding the
+first item for which CHECK is fboundp, and returning the correponding FUNC."
+ (let ((bs mdw-good-url-browsers) b check func answer)
+ (while (and bs (not answer))
+ (setq b (car bs)
+ bs (cdr bs))
+ (if (consp b)
+ (setq check (car b) func (cdr b))
+ (setq check b func b))
+ (if (fboundp check)
+ (setq answer func)))
+ answer))
+
;;;----- Paragraph filling --------------------------------------------------
;; --- Useful variables ---
(make-variable-buffer-local 'mdw-fill-prefix)
(defvar mdw-hanging-indents
- "\\(\\(\\([*o]\\|--\\|[0-9]+\\.\\|\\[[0-9]+\\]\\|([a-zA-Z])\\)[ \t]+\\)?\\)"
+ (concat "\\(\\("
+ "\\([*o]\\|-[-#]?\\|[0-9]+\\.\\|\\[[0-9]+\\]\\|([a-zA-Z])\\)"
+ "[ \t]+"
+ "\\)?\\)")
"*Standard regular expression matching things which might be part of a
hanging indent. This is mainly useful in `auto-fill-mode'.")
;;;----- Other common declarations ------------------------------------------
-(defun mdw-set-frame-transparency (&optional n)
- (interactive "P")
- (let* ((alist (frame-parameters))
- (trans (assq 'transparency alist)))
- (if trans
- (rplacd trans (not (if n (zerop n) (cdr trans))))
- (setq trans (cons 'transparency (not (equal 0 n)))))
- (modify-frame-parameters (selected-frame) (list trans))))
-
-;; --- Mouse wheel support ---
-
-(defconst mdw-wheel-scroll-amount 15)
-(defun mdw-wheel-up (click)
- (interactive "@e")
- (mdw-wheel-scroll click (function scroll-down)))
-(defun mdw-wheel-down (click)
- (interactive "@e")
- (mdw-wheel-scroll click (function scroll-up)))
-
-(defun mdw-wheel-scroll (click func)
- (let ((win (selected-window)))
- (unwind-protect
- (progn
- (select-window (posn-window (event-start click)))
- (let ((arg 2))
- (funcall func (/ (window-height) 2))))
- (select-window win))))
-
-;; --- Going backwards ---
-
-(defun other-window-backwards (arg)
- (interactive "p")
- (other-window (- arg)))
-
;; --- Common mode settings ---
(defvar mdw-auto-indent t
(and mdw-auto-indent
(cond ((eq major-mode 'lisp-mode)
(local-set-key "\C-m" 'mdw-indent-newline-and-indent))
- ((eq major-mode 'slime-repl-mode) nil)
+ ((or (eq major-mode 'slime-repl-mode)
+ (eq major-mode 'asm-mode))
+ nil)
(t
(local-set-key "\C-m" 'newline-and-indent))))
(local-set-key [C-return] 'newline)
- (local-set-key [?\;] 'self-insert-command)
+ (or (eq major-mode 'asm-mode)
+ (local-set-key [?\;] 'self-insert-command))
(local-set-key [?\#] 'self-insert-command)
(local-set-key [?\"] 'self-insert-command)
(setq comment-column 40)
(auto-fill-mode 1)
(setq fill-column 77)
+ (setq show-trailing-whitespace t)
(mdw-set-font))
;; --- Set up all sorts of faces ---
(defvar mdw-number-face 'mdw-number-face "Face to use for numbers")
(make-face 'mdw-number-face)
+;; --- Backup file handling ---
+
+(defvar mdw-backup-disable-regexps nil
+ "*List of regular expressions: if a file name matches any of these then the
+file is not backed up.")
+
+(defun mdw-backup-enable-predicate (name)
+ "[mdw]'s default backup predicate: allows a backup if the
+standard predicate would allow it, and it doesn't match any of
+the regular expressions in `mdw-backup-disable-regexps'."
+ (and (normal-backup-enable-predicate name)
+ (let ((answer t) (list mdw-backup-disable-regexps))
+ (save-match-data
+ (while list
+ (if (string-match (car list) name)
+ (setq answer nil))
+ (setq list (cdr list)))
+ answer))))
+(setq backup-enable-predicate 'mdw-backup-enable-predicate)
+
;;;----- General fontification ----------------------------------------------
-(defun mdw-set-fonts (frame ff)
- (if ff (progn (set-face-attribute (caar ff) frame
- :family 'unspecified
- :width 'unspecified
- :height 'unspecified
- :weight 'unspecified
- :slant 'unspecified
- :foreground 'unspecified
- :background 'unspecified
- :underline 'unspecified
- :overline 'unspecified
- :strike-through 'unspecified
- :box 'unspecified
- :inverse-video 'unspecified
- :stipple 'unspecified
-; :font 'unspecified
- :inherit 'unspecified
- )
- (apply 'set-face-attribute (caar ff) frame (cdar ff))
- (mdw-set-fonts frame (cdr ff)))))
+(defun mdw-set-fonts (frame faces)
+ (while faces
+ (let ((face (caar faces)))
+ (or (facep face) (make-face face))
+ (set-face-attribute face frame
+ :family 'unspecified
+ :width 'unspecified
+ :height 'unspecified
+ :weight 'unspecified
+ :slant 'unspecified
+ :foreground 'unspecified
+ :background 'unspecified
+ :underline 'unspecified
+ :overline 'unspecified
+ :strike-through 'unspecified
+ :box 'unspecified
+ :inverse-video 'unspecified
+ :stipple 'unspecified
+ ;:font 'unspecified
+ :inherit 'unspecified)
+ (apply 'set-face-attribute face frame (cdar faces))
+ (setq faces (cdr faces)))))
(defun mdw-do-set-font (&optional frame)
(interactive)
,@(cond ((eq window-system 'w32)
'(:family "courier new" :height 85))
((eq window-system 'x)
- '(:family "misc-fixed" :width semi-condensed))))
- (modeline :foreground "blue" :background "yellow"
- :box (:line-width 1 :style released-button))
+ '(:family "misc-fixed" :height 130 :width semi-condensed))))
+ (fixed-pitch)
+ (minibuffer-prompt)
+ (mode-line :foreground "blue" :background "yellow"
+ :box (:line-width 1 :style released-button))
+ (mode-line-inactive :foreground "yellow" :background "blue"
+ :box (:line-width 1 :style released-button))
(scroll-bar :foreground "black" :background "lightgrey")
- (fringe :foreground "yellow" :background "grey30")
+ (fringe :foreground "yellow" :background "black")
(show-paren-match-face :background "darkgreen")
(show-paren-mismatch-face :background "red")
(font-lock-warning-face :background "red" :weight bold)
(mdw-number-face :foreground "yellow")
(font-lock-function-name-face :weight bold)
(font-lock-variable-name-face :slant italic)
+ (font-lock-comment-delimiter-face
+ :foreground ,(if window-system "SeaGreen1" "green")
+ :slant italic)
(font-lock-comment-face
:foreground ,(if window-system "SeaGreen1" "green")
:slant italic)
(font-lock-keyword-face :weight bold)
(font-lock-constant-face :weight bold)
(font-lock-reference-face :weight bold)
- (woman-bold-face :weight bold)
- (woman-italic-face :slant italic)
- (diff-header-face :foreground "skyblue1")
- (diff-index-face :weight bold)
- (diff-file-header-face)
- (diff-context-face :foreground "grey70")
- (diff-added-face :foreground "white")
- (diff-removed-face :foreground "white" :slant italic)
+ (woman-bold :weight bold)
+ (woman-italic :slant italic)
+ (diff-index :weight bold)
+ (diff-file-header :weight bold)
+ (diff-hunk-header :foreground "SkyBlue1")
+ (diff-function :foreground "SkyBlue1" :weight bold)
+ (diff-header :background "grey10")
+ (diff-added :foreground "green")
+ (diff-removed :foreground "red")
+ (diff-context)
(whizzy-slice-face :background "grey10")
(whizzy-error-face :background "darkred")
+ (trailing-whitespace :background "red")
)))
(defun mdw-set-font ()
(label . 0)
(case-label . +)
(access-label . -)
- (inclass . ++)
+ (inclass . +)
(inline-open . ++)
(statement-cont . 0)
(statement-case-intro . +)))
(setq c-hanging-comment-ender-p nil)
(setq c-backslash-column 72)
(setq c-label-minimum-indentation 0)
- (setq comment-start "/* ")
- (setq comment-end " */")
(setq mdw-fill-prefix
`((,(concat "\\([ \t]*/?\\)"
"\\([\*/][ \t]*\\)"
;; --- Now define things to be fontified ---
- (make-local-variable 'font-lock-keywords)
+ (make-local-variable 'font-lock-keywords)
(let ((c-keywords
- (make-regexp '(
- ;; "and" ;C++
- ;; "and_eq" ;C++
- "asm" ;K&R, GCC
- "auto" ;K&R, C89
- ;; "bitand" ;C++
- ;; "bitor" ;C++
- "bool" ;C++, C9X macro
- "break" ;K&R, C89
- "case" ;K&R, C89
- "catch" ;C++
- "char" ;K&R, C89
- "class" ;C++
- "complex" ;C9X macro, C++ template type
- ;; "compl" ;C++
- "const" ;C89
- "const_cast" ;C++
- "continue" ;K&R, C89
- "defined" ;C89 preprocessor
- "default" ;K&R, C89
- "delete" ;C++
- "do" ;K&R, C89
- "double" ;K&R, C89
- "dynamic_cast" ;C++
- "else" ;K&R, C89
- ;; "entry" ;K&R -- never used
- "enum" ;C89
- "explicit" ;C++
- ;; "export" ;C++
- "extern" ;K&R, C89
- "false" ;C++, C9X macro
- "float" ;K&R, C89
- "for" ;K&R, C89
- "fortran" ;K&R
- "friend" ;C++
- "goto" ;K&R, C89
- "if" ;K&R, C89
- "imaginary" ;C9X macro
- "inline" ;C++, C9X, GCC
- "int" ;K&R, C89
- "long" ;K&R, C89
- "mutable" ;C++
- "namespace" ;C++
- "new" ;C++
- "operator" ;C++
- ;; "or" ;C++
- ;; "or_eq" ;C++
- "private" ;C++
- "protected" ;C++
- "public" ;C++
- "register" ;K&R, C89
- "reinterpret_cast" ;C++
- "restrict" ;C9X
- "return" ;K&R, C89
- "short" ;K&R, C89
- "signed" ;C89
- "sizeof" ;K&R, C89
- "static" ;K&R, C89
- "static_cast" ;C++
- "struct" ;K&R, C89
- "switch" ;K&R, C89
- "template" ;C++
- "this" ;C++
- "throw" ;C++
- "true" ;C++, C9X macro
- "try" ;C++
- "this" ;C++
- "typedef" ;C89
- "typeid" ;C++
- "typeof" ;GCC
- "typename" ;C++
- "union" ;K&R, C89
- "unsigned" ;K&R, C89
- "using" ;C++
- "virtual" ;C++
- "void" ;C89
- "volatile" ;C89
- "wchar_t" ;C++, C89 library type
- "while" ;K&R, C89
- ;; "xor" ;C++
- ;; "xor_eq" ;C++
- "_Bool" ;C9X
- "_Complex" ;C9X
- "_Imaginary" ;C9X
- "_Pragma" ;C9X preprocessor
- "__alignof__" ;GCC
- "__asm__" ;GCC
- "__attribute__" ;GCC
- "__complex__" ;GCC
- "__const__" ;GCC
- "__extension__" ;GCC
- "__imag__" ;GCC
- "__inline__" ;GCC
- "__label__" ;GCC
- "__real__" ;GCC
- "__signed__" ;GCC
- "__typeof__" ;GCC
- "__volatile__" ;GCC
- )))
+ (mdw-regexps "and" ;C++
+ "and_eq" ;C++
+ "asm" ;K&R, GCC
+ "auto" ;K&R, C89
+ "bitand" ;C++
+ "bitor" ;C++
+ "bool" ;C++, C9X macro
+ "break" ;K&R, C89
+ "case" ;K&R, C89
+ "catch" ;C++
+ "char" ;K&R, C89
+ "class" ;C++
+ "complex" ;C9X macro, C++ template type
+ "compl" ;C++
+ "const" ;C89
+ "const_cast" ;C++
+ "continue" ;K&R, C89
+ "defined" ;C89 preprocessor
+ "default" ;K&R, C89
+ "delete" ;C++
+ "do" ;K&R, C89
+ "double" ;K&R, C89
+ "dynamic_cast" ;C++
+ "else" ;K&R, C89
+ ;; "entry" ;K&R -- never used
+ "enum" ;C89
+ "explicit" ;C++
+ "export" ;C++
+ "extern" ;K&R, C89
+ "false" ;C++, C9X macro
+ "float" ;K&R, C89
+ "for" ;K&R, C89
+ ;; "fortran" ;K&R
+ "friend" ;C++
+ "goto" ;K&R, C89
+ "if" ;K&R, C89
+ "imaginary" ;C9X macro
+ "inline" ;C++, C9X, GCC
+ "int" ;K&R, C89
+ "long" ;K&R, C89
+ "mutable" ;C++
+ "namespace" ;C++
+ "new" ;C++
+ "operator" ;C++
+ "or" ;C++
+ "or_eq" ;C++
+ "private" ;C++
+ "protected" ;C++
+ "public" ;C++
+ "register" ;K&R, C89
+ "reinterpret_cast" ;C++
+ "restrict" ;C9X
+ "return" ;K&R, C89
+ "short" ;K&R, C89
+ "signed" ;C89
+ "sizeof" ;K&R, C89
+ "static" ;K&R, C89
+ "static_cast" ;C++
+ "struct" ;K&R, C89
+ "switch" ;K&R, C89
+ "template" ;C++
+ "this" ;C++
+ "throw" ;C++
+ "true" ;C++, C9X macro
+ "try" ;C++
+ "this" ;C++
+ "typedef" ;C89
+ "typeid" ;C++
+ "typeof" ;GCC
+ "typename" ;C++
+ "union" ;K&R, C89
+ "unsigned" ;K&R, C89
+ "using" ;C++
+ "virtual" ;C++
+ "void" ;C89
+ "volatile" ;C89
+ "wchar_t" ;C++, C89 library type
+ "while" ;K&R, C89
+ "xor" ;C++
+ "xor_eq" ;C++
+ "_Bool" ;C9X
+ "_Complex" ;C9X
+ "_Imaginary" ;C9X
+ "_Pragma" ;C9X preprocessor
+ "__alignof__" ;GCC
+ "__asm__" ;GCC
+ "__attribute__" ;GCC
+ "__complex__" ;GCC
+ "__const__" ;GCC
+ "__extension__" ;GCC
+ "__imag__" ;GCC
+ "__inline__" ;GCC
+ "__label__" ;GCC
+ "__real__" ;GCC
+ "__signed__" ;GCC
+ "__typeof__" ;GCC
+ "__volatile__" ;GCC
+ ))
(preprocessor-keywords
- (make-regexp '("assert" "define" "elif" "else" "endif" "error"
- "ident" "if" "ifdef" "ifndef" "import" "include"
- "line" "pragma" "unassert" "undef" "warning")))
+ (mdw-regexps "assert" "define" "elif" "else" "endif" "error"
+ "ident" "if" "ifdef" "ifndef" "import" "include"
+ "line" "pragma" "unassert" "undef" "warning"))
(objc-keywords
- (make-regexp '("class" "defs" "encode" "end" "implementation"
- "interface" "private" "protected" "protocol" "public"
- "selector"))))
+ (mdw-regexps "class" "defs" "encode" "end" "implementation"
+ "interface" "private" "protected" "protocol" "public"
+ "selector")))
(setq font-lock-keywords
(list
- 't
;; --- Fontify include files as strings ---
;; --- Now define things to be fontified ---
- (make-local-variable 'font-lock-keywords)
+ (make-local-variable 'font-lock-keywords)
(let ((c-keywords
- (make-regexp '("break" "case" "cd" "continue" "define" "default"
- "do" "else" "exit" "for" "global" "goto" "help" "if"
- "local" "mat" "obj" "print" "quit" "read" "return"
- "show" "static" "switch" "while" "write"))))
+ (mdw-regexps "break" "case" "cd" "continue" "define" "default"
+ "do" "else" "exit" "for" "global" "goto" "help" "if"
+ "local" "mat" "obj" "print" "quit" "read" "return"
+ "show" "static" "switch" "while" "write")))
(setq font-lock-keywords
(list
- 't
;; --- Handle the keywords defined above ---
;; --- Now define things to be fontified ---
- (make-local-variable 'font-lock-keywords)
+ (make-local-variable 'font-lock-keywords)
(let ((java-keywords
- (make-regexp '("abstract" "boolean" "break" "byte" "case" "catch"
- "char" "class" "const" "continue" "default" "do"
- "double" "else" "extends" "final" "finally" "float"
- "for" "goto" "if" "implements" "import" "instanceof"
- "int" "interface" "long" "native" "new" "package"
- "private" "protected" "public" "return" "short"
- "static" "super" "switch" "synchronized" "this"
- "throw" "throws" "transient" "try" "void" "volatile"
- "while"
-
- "false" "null" "true"))))
+ (mdw-regexps "abstract" "boolean" "break" "byte" "case" "catch"
+ "char" "class" "const" "continue" "default" "do"
+ "double" "else" "extends" "final" "finally" "float"
+ "for" "goto" "if" "implements" "import" "instanceof"
+ "int" "interface" "long" "native" "new" "package"
+ "private" "protected" "public" "return" "short"
+ "static" "super" "switch" "synchronized" "this"
+ "throw" "throws" "transient" "try" "void" "volatile"
+ "while"
+
+ "false" "null" "true")))
(setq font-lock-keywords
(list
- 't
;; --- Handle the keywords defined above ---
(list "\\(\\s.\\|\\s(\\|\\s)\\|\\s\\\\|\\s/\\)"
'(0 mdw-punct-face))))))
+;;;----- C# programming configuration ---------------------------------------
+
+;; --- Make indentation nice ---
+
+(defun mdw-csharp-style ()
+ (c-add-style "[mdw] C# style"
+ '((c-basic-offset . 2)
+ (c-tab-always-indent . nil)
+ (c-offsets-alist (substatement-open . 0)
+ (label . 0)
+ (case-label . +)
+ (access-label . 0)
+ (inclass . +)
+ (statement-case-intro . +)))
+ t))
+
+;; --- Declare C# fontification style ---
+
+(defun mdw-fontify-csharp ()
+
+ ;; --- Other stuff ---
+
+ (mdw-csharp-style)
+ (modify-syntax-entry ?_ "w")
+ (setq c-hanging-comment-ender-p nil)
+ (setq c-backslash-column 72)
+ (setq comment-start "/* ")
+ (setq comment-end " */")
+ (setq mdw-fill-prefix
+ `((,(concat "\\([ \t]*/?\\)"
+ "\\([\*/][ \t]*\\)"
+ "\\([A-Za-z]+:[ \t]*\\)?"
+ mdw-hanging-indents)
+ (pad . 1) (match . 2) (pad . 3) (pad . 4))))
+
+ ;; --- Now define things to be fontified ---
+
+ (make-local-variable 'font-lock-keywords)
+ (let ((csharp-keywords
+ (mdw-regexps "abstract" "as" "base" "bool" "break"
+ "byte" "case" "catch" "char" "checked"
+ "class" "const" "continue" "decimal" "default"
+ "delegate" "do" "double" "else" "enum"
+ "event" "explicit" "extern" "false" "finally"
+ "fixed" "float" "for" "foreach" "goto"
+ "if" "implicit" "in" "int" "interface"
+ "internal" "is" "lock" "long" "namespace"
+ "new" "null" "object" "operator" "out"
+ "override" "params" "private" "protected" "public"
+ "readonly" "ref" "return" "sbyte" "sealed"
+ "short" "sizeof" "stackalloc" "static" "string"
+ "struct" "switch" "this" "throw" "true"
+ "try" "typeof" "uint" "ulong" "unchecked"
+ "unsafe" "ushort" "using" "virtual" "void"
+ "volatile" "while" "yield")))
+
+ (setq font-lock-keywords
+ (list
+
+ ;; --- Handle the keywords defined above ---
+
+ (list (concat "\\<\\(" csharp-keywords "\\)\\>")
+ '(0 font-lock-keyword-face))
+
+ ;; --- Handle numbers too ---
+ ;;
+ ;; The following isn't quite right, but it's close enough.
+
+ (list (concat "\\<\\("
+ "0\\([xX][0-9a-fA-F]+\\|[0-7]+\\)\\|"
+ "[0-9]+\\(\\.[0-9]*\\|\\)"
+ "\\([eE]\\([-+]\\|\\)[0-9]+\\|\\)\\)"
+ "[lLfFdD]?")
+ '(0 mdw-number-face))
+
+ ;; --- And anything else is punctuation ---
+
+ (list "\\(\\s.\\|\\s(\\|\\s)\\|\\s\\\\|\\s/\\)"
+ '(0 mdw-punct-face))))))
+
+(defun csharp-mode ()
+ (interactive)
+ (java-mode)
+ (setq major-mode 'csharp-mode)
+ (setq mode-name "C#")
+ (mdw-fontify-csharp)
+ (run-hooks 'csharp-mode-hook))
+
;;;----- Awk programming configuration --------------------------------------
;; --- Make Awk indentation nice ---
;; --- Now define things to be fontified ---
- (make-local-variable 'font-lock-keywords)
+ (make-local-variable 'font-lock-keywords)
(let ((c-keywords
- (make-regexp '("BEGIN" "END" "ARGC" "ARGIND" "ARGV" "CONVFMT"
- "ENVIRON" "ERRNO" "FIELDWIDTHS" "FILENAME" "FNR"
- "FS" "IGNORECASE" "NF" "NR" "OFMT" "OFS" "ORS" "RS"
- "RSTART" "RLENGTH" "RT" "SUBSEP"
- "atan2" "break" "close" "continue" "cos" "delete"
- "do" "else" "exit" "exp" "fflush" "file" "for" "func"
- "function" "gensub" "getline" "gsub" "if" "in"
- "index" "int" "length" "log" "match" "next" "rand"
- "return" "print" "printf" "sin" "split" "sprintf"
- "sqrt" "srand" "strftime" "sub" "substr" "system"
- "systime" "tolower" "toupper" "while"))))
+ (mdw-regexps "BEGIN" "END" "ARGC" "ARGIND" "ARGV" "CONVFMT"
+ "ENVIRON" "ERRNO" "FIELDWIDTHS" "FILENAME" "FNR"
+ "FS" "IGNORECASE" "NF" "NR" "OFMT" "OFS" "ORS" "RS"
+ "RSTART" "RLENGTH" "RT" "SUBSEP"
+ "atan2" "break" "close" "continue" "cos" "delete"
+ "do" "else" "exit" "exp" "fflush" "file" "for" "func"
+ "function" "gensub" "getline" "gsub" "if" "in"
+ "index" "int" "length" "log" "match" "next" "rand"
+ "return" "print" "printf" "sin" "split" "sprintf"
+ "sqrt" "srand" "strftime" "sub" "substr" "system"
+ "systime" "tolower" "toupper" "while")))
(setq font-lock-keywords
(list
- 't
;; --- Handle the keywords defined above ---
;; --- Now define fontification things ---
- (make-local-variable 'font-lock-keywords)
+ (make-local-variable 'font-lock-keywords)
(let ((perl-keywords
- (make-regexp '("and" "cmp" "continue" "do" "else" "elsif" "eq"
- "for" "foreach" "ge" "gt" "goto" "if"
- "last" "le" "lt" "local" "my" "ne" "next" "or"
- "package" "redo" "require" "return" "sub"
- "undef" "unless" "until" "use" "while"))))
+ (mdw-regexps "and" "cmp" "continue" "do" "else" "elsif" "eq"
+ "for" "foreach" "ge" "gt" "goto" "if"
+ "last" "le" "lt" "local" "my" "ne" "next" "or"
+ "package" "redo" "require" "return" "sub"
+ "undef" "unless" "until" "use" "while")))
(setq font-lock-keywords
(list
- 't
;; --- Set up the keywords defined above ---
;; --- Define Python fontification style ---
-(trap (require 'pyrex-mode))
(defun mdw-fontify-python ()
;; --- Miscellaneous fiddling ---
;; --- Now define fontification things ---
- (make-local-variable 'font-lock-keywords)
+ (make-local-variable 'font-lock-keywords)
(let ((python-keywords
- (make-regexp '("and" "as" "assert" "break" "class" "continue" "def"
- "del" "elif" "else" "except" "exec" "finally" "for"
- "from" "global" "if" "import" "in" "is" "lambda"
- "not" "or" "pass" "print" "raise" "return" "try"
- "while" "yield"))))
+ (mdw-regexps "and" "as" "assert" "break" "class" "continue" "def"
+ "del" "elif" "else" "except" "exec" "finally" "for"
+ "from" "global" "if" "import" "in" "is" "lambda"
+ "not" "or" "pass" "print" "raise" "return" "try"
+ "while" "with" "yield")))
(setq font-lock-keywords
(list
- 't
;; --- Set up the keywords defined above ---
;; --- Fiddle with fontification ---
- (make-local-variable 'font-lock-keywords)
+ (make-local-variable 'font-lock-keywords)
(setq font-lock-keywords
(list
- 't
;; --- Handle numbers too ---
;;
(run-hooks 'arm-assembler-mode-hook))
+;;;----- Assembler mode -----------------------------------------------------
+
+(defun mdw-fontify-asm ()
+ (modify-syntax-entry ?' "\"")
+ (modify-syntax-entry ?. "w")
+ (setf fill-prefix nil)
+ (mdw-standard-fill-prefix "\\([ \t]*;+[ \t]*\\)"))
+
;;;----- TCL configuration --------------------------------------------------
(defun mdw-fontify-tcl ()
(mapcar #'(lambda (ch) (modify-syntax-entry ch ".")) '(?$))
(mdw-standard-fill-prefix "\\([ \t]*#+[ \t]*\\)")
- (make-local-variable 'font-lock-keywords)
+ (make-local-variable 'font-lock-keywords)
(setq font-lock-keywords
(list
- 't
(list (concat "\\<0\\([xX][0-9a-fA-F_]+\\|[0-7_]+\\)\\|"
"\\<[0-9][0-9_]*\\(\\.[0-9_]*\\|\\)"
"\\([eE]\\([-+]\\|\\)[0-9_]+\\|\\)")
(setq rexx-tab-always-indent nil)
(setq rexx-cont-indent rexx-indent)
- (make-local-variable 'font-lock-keywords)
+ (make-local-variable 'font-lock-keywords)
(let ((rexx-keywords
- (make-regexp '("address" "arg" "by" "call" "digits" "do" "drop"
- "else" "end" "engineering" "exit" "expose" "for"
- "forever" "form" "fuzz" "if" "interpret" "iterate"
- "leave" "linein" "name" "nop" "numeric" "off" "on"
- "options" "otherwise" "parse" "procedure" "pull"
- "push" "queue" "return" "say" "select" "signal"
- "scientific" "source" "then" "trace" "to" "until"
- "upper" "value" "var" "version" "when" "while"
- "with"
-
- "abbrev" "abs" "bitand" "bitor" "bitxor" "b2x"
- "center" "center" "charin" "charout" "chars"
- "compare" "condition" "copies" "c2d" "c2x"
- "datatype" "date" "delstr" "delword" "d2c" "d2x"
- "errortext" "format" "fuzz" "insert" "lastpos"
- "left" "length" "lineout" "lines" "max" "min"
- "overlay" "pos" "queued" "random" "reverse" "right"
- "sign" "sourceline" "space" "stream" "strip"
- "substr" "subword" "symbol" "time" "translate"
- "trunc" "value" "verify" "word" "wordindex"
- "wordlength" "wordpos" "words" "xrange" "x2b" "x2c"
- "x2d"))))
+ (mdw-regexps "address" "arg" "by" "call" "digits" "do" "drop"
+ "else" "end" "engineering" "exit" "expose" "for"
+ "forever" "form" "fuzz" "if" "interpret" "iterate"
+ "leave" "linein" "name" "nop" "numeric" "off" "on"
+ "options" "otherwise" "parse" "procedure" "pull"
+ "push" "queue" "return" "say" "select" "signal"
+ "scientific" "source" "then" "trace" "to" "until"
+ "upper" "value" "var" "version" "when" "while"
+ "with"
+
+ "abbrev" "abs" "bitand" "bitor" "bitxor" "b2x"
+ "center" "center" "charin" "charout" "chars"
+ "compare" "condition" "copies" "c2d" "c2x"
+ "datatype" "date" "delstr" "delword" "d2c" "d2x"
+ "errortext" "format" "fuzz" "insert" "lastpos"
+ "left" "length" "lineout" "lines" "max" "min"
+ "overlay" "pos" "queued" "random" "reverse" "right"
+ "sign" "sourceline" "space" "stream" "strip"
+ "substr" "subword" "symbol" "time" "translate"
+ "trunc" "value" "verify" "word" "wordindex"
+ "wordlength" "wordpos" "words" "xrange" "x2b" "x2c"
+ "x2d")))
(setq font-lock-keywords
(list
- 't
;; --- Set up the keywords defined above ---
;; --- Now define fontification things ---
- (make-local-variable 'font-lock-keywords)
+ (make-local-variable 'font-lock-keywords)
(let ((sml-keywords
- (make-regexp '("abstype" "and" "andalso" "as"
- "case"
- "datatype" "do"
- "else" "end" "eqtype" "exception"
- "fn" "fun" "functor"
- "handle"
- "if" "in" "include" "infix" "infixr"
- "let" "local"
- "nonfix"
- "of" "op" "open" "orelse"
- "raise" "rec"
- "sharing" "sig" "signature" "struct" "structure"
- "then" "type"
- "val"
- "where" "while" "with" "withtype"))))
+ (mdw-regexps "abstype" "and" "andalso" "as"
+ "case"
+ "datatype" "do"
+ "else" "end" "eqtype" "exception"
+ "fn" "fun" "functor"
+ "handle"
+ "if" "in" "include" "infix" "infixr"
+ "let" "local"
+ "nonfix"
+ "of" "op" "open" "orelse"
+ "raise" "rec"
+ "sharing" "sig" "signature" "struct" "structure"
+ "then" "type"
+ "val"
+ "where" "while" "with" "withtype")))
(setq font-lock-keywords
(list
- 't
;; --- Set up the keywords defined above ---
(list (concat "\\<\\(\\~\\|\\)"
"\\(0\\(\\([wW]\\|\\)[xX][0-9a-fA-F]+\\|"
- "[wW][0-9]+\\)\\|"
- "\\([0-9]+\\(\\.[0-9]+\\|\\)"
- "\\([eE]\\(\\~\\|\\)"
- "[0-9]+\\|\\)\\)\\)")
+ "[wW][0-9]+\\)\\|"
+ "\\([0-9]+\\(\\.[0-9]+\\|\\)"
+ "\\([eE]\\(\\~\\|\\)"
+ "[0-9]+\\|\\)\\)\\)")
'(0 mdw-number-face))
;; --- And anything else is punctuation ---
;; --- Fiddle with fontification ---
- (make-local-variable 'font-lock-keywords)
+ (make-local-variable 'font-lock-keywords)
(let ((haskell-keywords
- (make-regexp '("as" "case" "ccall" "class" "data" "default"
- "deriving" "do" "else" "foreign" "hiding" "if"
- "import" "in" "infix" "infixl" "infixr" "instance"
- "let" "module" "newtype" "of" "qualified" "safe"
- "stdcall" "then" "type" "unsafe" "where"))))
+ (mdw-regexps "as" "case" "ccall" "class" "data" "default"
+ "deriving" "do" "else" "foreign" "hiding" "if"
+ "import" "in" "infix" "infixl" "infixr" "instance"
+ "let" "module" "newtype" "of" "qualified" "safe"
+ "stdcall" "then" "type" "unsafe" "where")))
(setq font-lock-keywords
(list
- 't
(list "--.*$"
'(0 font-lock-comment-face))
(list (concat "\\<\\(" haskell-keywords "\\)\\>")
;; --- Real fontification things ---
- (make-local-variable 'font-lock-keywords)
+ (make-local-variable 'font-lock-keywords)
(setq font-lock-keywords
(list
- 't
;; --- Environment names are keywords ---
;; --- Real fontification things ---
- (make-local-variable 'font-lock-keywords)
+ (make-local-variable 'font-lock-keywords)
(setq font-lock-keywords
(list
- 't
;; --- Environment names are keywords ---
;; --- Handle @/.../ for italics ---
;; (list "\\(@/\\)\\([^/]*\\)\\(/\\)"
- ;; '(1 font-lock-keyword-face)
- ;; '(3 font-lock-keyword-face))
+ ;; '(1 font-lock-keyword-face)
+ ;; '(3 font-lock-keyword-face))
;; --- Handle @*...* for boldness ---
;; (list "\\(@\\*\\)\\([^*]*\\)\\(\\*\\)"
- ;; '(1 font-lock-keyword-face)
- ;; '(3 font-lock-keyword-face))
+ ;; '(1 font-lock-keyword-face)
+ ;; '(3 font-lock-keyword-face))
;; --- Handle @`...' for literal syntax things ---
;; (list "\\(@`\\)\\([^']*\\)\\('\\)"
- ;; '(1 font-lock-keyword-face)
- ;; '(3 font-lock-keyword-face))
+ ;; '(1 font-lock-keyword-face)
+ ;; '(3 font-lock-keyword-face))
;; --- Handle @<...> for nonterminals ---
;; (list "\\(@<\\)\\([^>]*\\)\\(>\\)"
- ;; '(1 font-lock-keyword-face)
- ;; '(3 font-lock-keyword-face))
+ ;; '(1 font-lock-keyword-face)
+ ;; '(3 font-lock-keyword-face))
;; --- Handle other @-commands ---
;; (list "@\\([^a-zA-Z]\\|[a-zA-Z]*\\)"
- ;; '(0 font-lock-keyword-face))
+ ;; '(0 font-lock-keyword-face))
;; --- Make sure we get comments properly ---
(list "[$^_{}#&]"
'(0 mdw-punct-face)))))
+;;;----- SGML hacking -------------------------------------------------------
+
+(defun mdw-sgml-mode ()
+ (interactive)
+ (sgml-mode)
+ (mdw-standard-fill-prefix "")
+ (make-variable-buffer-local 'sgml-delimiters)
+ (setq sgml-delimiters
+ '("AND" "&" "COM" "--" "CRO" "&#" "DSC" "]" "DSO" "[" "DTGC" "]"
+ "DTGO" "[" "ERO" "&" "ETAGO" ":e" "GRPC" ")" "GRPO" "(" "LIT" "\""
+ "LITA" "'" "MDC" ">" "MDO" "<!" "MINUS" "-" "MSC" "]]" "NESTC" "{"
+ "NET" "}" "OPT" "?" "OR" "|" "PERO" "%" "PIC" ">" "PIO" "<?"
+ "PLUS" "+" "REFC" "." "REP" "*" "RNI" "#" "SEQ" "," "STAGO" ":"
+ "TAGC" "." "VI" "=" "MS-START" "<![" "MS-END" "]]>"
+ "XML-ECOM" "-->" "XML-PIC" "?>" "XML-SCOM" "<!--" "XML-TAGCE" "/>"
+ "NULL" ""))
+ (setq major-mode 'mdw-sgml-mode)
+ (setq mode-name "[mdw] SGML")
+ (run-hooks 'mdw-sgml-mode-hook))
+
;;;----- Shell scripts ------------------------------------------------------
(defun mdw-setup-sh-script-mode ()
(make-local-variable 'font-lock-defaults)
(make-local-variable 'message-mode-keywords)
(let ((keywords
- (make-regexp '("array" "bitmap" "callback" "docs[ \t]+enum"
- "export" "enum" "fixed-octetstring" "flags"
- "harmless" "map" "nested" "optional"
- "optional-tagged" "package" "primitive"
- "primitive-nullfree" "relaxed[ \t]+enum"
- "set" "table" "tagged-optional" "union"
- "variadic" "vector" "version" "version-tag"))))
+ (mdw-regexps "array" "bitmap" "callback" "docs[ \t]+enum"
+ "export" "enum" "fixed-octetstring" "flags"
+ "harmless" "map" "nested" "optional"
+ "optional-tagged" "package" "primitive"
+ "primitive-nullfree" "relaxed[ \t]+enum"
+ "set" "table" "tagged-optional" "union"
+ "variadic" "vector" "version" "version-tag")))
(setq message-mode-keywords
(list
(list (concat "\\<\\(" keywords "\\)\\>:")
(setq comment-start "/* ")
(setq comment-end " */")
(let ((preprocessor-keywords
- (make-regexp '("assert" "define" "elif" "else" "endif" "error"
- "ident" "if" "ifdef" "ifndef" "import" "include"
- "line" "pragma" "unassert" "undef" "warning"))))
+ (mdw-regexps "assert" "define" "elif" "else" "endif" "error"
+ "ident" "if" "ifdef" "ifndef" "import" "include"
+ "line" "pragma" "unassert" "undef" "warning")))
(setq message-mode-keywords
(append (list (list (concat "^[ \t]*\\#[ \t]*"
"\\(include\\|import\\)"
'(2 font-lock-string-face))
(list (concat "^\\([ \t]*#[ \t]*\\(\\("
preprocessor-keywords
- "\\)\\>\\|[0-9]+\\|$\\)\\)")
+ "\\)\\>\\|[0-9]+\\|$\\)\\)")
'(1 font-lock-keyword-face)))
message-mode-keywords)))
(turn-on-font-lock-if-enabled)
(make-local-variable 'font-lock-defaults)
(make-local-variable 'mallow-driver-mode-keywords)
(let ((keywords
- (make-regexp '("each" "divert" "file" "if"
- "perl" "set" "string" "type" "write"))))
+ (mdw-regexps "each" "divert" "file" "if"
+ "perl" "set" "string" "type" "write")))
(setq mallow-driver-mode-keywords
(list
(list (concat "^%\\s *\\(}\\|\\(" keywords "\\)\\>\\).*$")
(local-set-key "\C-i" 'smalltalk-reindent))
(defun mdw-fontify-smalltalk ()
- (make-local-variable 'font-lock-keywords)
+ (make-local-variable 'font-lock-keywords)
(setq font-lock-keywords
(list
- 't
(list "\\<[A-Z][a-zA-Z0-9]*\\>"
'(0 font-lock-keyword-face))
(list (concat "\\<0\\([xX][0-9a-fA-F_]+\\|[0-7_]+\\)\\|"
;; --- Not much fontification needed ---
- (make-local-variable 'font-lock-keywords)
+ (make-local-variable 'font-lock-keywords)
(setq font-lock-keywords
(list
- 't
(list "\\(\\s.\\|\\s(\\|\\s)\\|\\s\\\\|\\s/\\)"
'(0 mdw-punct-face)))))
(and mdw-auto-indent
(indent-for-tab-command)))
+(defun mdw-setup-m4 ()
+ (mdw-standard-fill-prefix "\\([ \t]*\\(?:#+\\|\\<dnl\\>\\)[ \t]*\\)"))
+
;;;----- Text mode ----------------------------------------------------------
(defun mdw-text-mode ()
(setq fill-column 72)
(flyspell-mode t)
(mdw-standard-fill-prefix
- "\\([ \t]*\\([A-Za-z0-9]*[>#|:] ?\\)*[ \t]*\\)" 3)
+ "\\([ \t]*\\([>#|:] ?\\)*[ \t]*\\)" 3)
(auto-fill-mode 1))
;;;----- Shell mode ---------------------------------------------------------
'comint-watch-for-password-prompt))
(defun mdw-term-mode-setup ()
- (setq term-prompt-regexp "^[^]#$%>»}\n]*[]#$%>»}] *")
+ (setq term-prompt-regexp "^[^]#$%>»}\n]*[]#$%>»}] *")
(make-local-variable 'mouse-yank-at-point)
(make-local-variable 'transient-mark-mode)
(setq mouse-yank-at-point t)