(defadvice write-file (after mdw-autorevert activate)
(mdw-check-autorevert))
-(defun mdwmail-mode ()
+(define-derived-mode mdwmail-mode mail-mode "[mdw] mail"
"Major mode for editing news and mail messages from external programs
Not much right now. Just support for doing MailCrypt stuff."
- (interactive)
- (kill-all-local-variables)
- (use-local-map text-mode-map)
- (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]*[-_][-_][-_]+$\\|^-- \\|-----\\|"
- paragraph-start))
- (setq paragraph-separate (concat "[ \t]*[-_][-_][-_]+$\\|^-- \\|-----\\|"
- paragraph-separate))
- (run-hooks 'text-mode-hook 'mdwmail-mode-hook 'mail-setup-hook))
+ :syntax-table nil
+ :abbrev-table nil
+ (run-hooks 'mail-setup-hook))
+
+(define-key mdwmail-mode-map [?\C-c ?\C-c] 'disabled-operation)
+
+(add-hook 'mdwail-mode-hook
+ (lambda ()
+ (set-buffer-file-coding-system 'utf-8)
+ (make-local-variable 'paragraph-separate)
+ (make-local-variable 'paragraph-start)
+ (setq paragraph-start
+ (concat "[ \t]*[-_][-_][-_]+$\\|^-- \\|-----\\|"
+ paragraph-start))
+ (setq paragraph-separate
+ (concat "[ \t]*[-_][-_][-_]+$\\|^-- \\|-----\\|"
+ paragraph-separate))))
;; --- How to encrypt in mdwmail ---
;;;----- 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
(t
(local-set-key "\C-m" 'newline-and-indent))))
(local-set-key [C-return] 'newline)
- (or (eq major-mode 'asm-mode)
- (local-set-key [?\;] 'self-insert-command))
- (local-set-key [?\#] 'self-insert-command)
- (local-set-key [?\"] 'self-insert-command)
+ (make-variable-buffer-local 'page-delimiter)
+ (setq page-delimiter "\f\\|^.*-\\{6\\}.*$")
(setq comment-column 40)
(auto-fill-mode 1)
(setq fill-column 77)
(setq show-trailing-whitespace t)
+ (outline-minor-mode t)
(mdw-set-font))
;; --- Set up all sorts of faces ---
(comint-highlight-input)
(font-lock-builtin-face :weight bold)
(font-lock-type-face :weight bold)
- (region :background "grey30")
+ (region :background ,(if window-system "grey30" "blue"))
(isearch :background "palevioletred2")
(mdw-punct-face :foreground ,(if window-system "burlywood2" "yellow"))
(mdw-number-face :foreground "yellow")
(font-lock-keyword-face :weight bold)
(font-lock-constant-face :weight bold)
(font-lock-reference-face :weight bold)
+ (message-cited-text
+ :foreground ,(if window-system "SeaGreen1" "green")
+ :slant italic)
+ (message-separator :background "red" :foreground "white" :weight bold)
+ (message-header-cc
+ :foreground ,(if window-system "SeaGreen1" "green")
+ :weight bold)
+ (message-header-newsgroups
+ :foreground ,(if window-system "SeaGreen1" "green")
+ :weight bold)
+ (message-header-subject
+ :foreground ,(if window-system "SeaGreen1" "green")
+ :weight bold)
+ (message-header-to
+ :foreground ,(if window-system "SeaGreen1" "green")
+ :weight bold)
+ (message-header-xheader
+ :foreground ,(if window-system "SeaGreen1" "green")
+ :weight bold)
+ (message-header-other
+ :foreground ,(if window-system "SeaGreen1" "green")
+ :weight bold)
+ (message-header-name
+ :foreground ,(if window-system "SeaGreen1" "green"))
(woman-bold :weight bold)
(woman-italic :slant italic)
(diff-index :weight bold)
(defun mdw-c-style ()
(c-add-style "[mdw] C and C++ style"
'((c-basic-offset . 2)
- (c-tab-always-indent . nil)
(comment-column . 40)
(c-class-key . "class")
(c-offsets-alist (substatement-open . 0)
;; --- Fiddle with some syntax codes ---
- (modify-syntax-entry ?_ "w")
(modify-syntax-entry ?* ". 23")
(modify-syntax-entry ?/ ". 124b")
(modify-syntax-entry ?\n "> b")
;; --- Fiddle with some syntax codes ---
- (modify-syntax-entry ?_ "w")
(modify-syntax-entry ?* ". 23")
(modify-syntax-entry ?/ ". 14")
(defun mdw-java-style ()
(c-add-style "[mdw] Java style"
'((c-basic-offset . 2)
- (c-tab-always-indent . nil)
(c-offsets-alist (substatement-open . 0)
(label . +)
(case-label . +)
;; --- Other stuff ---
(mdw-java-style)
- (modify-syntax-entry ?_ "w")
(setq c-hanging-comment-ender-p nil)
(setq c-backslash-column 72)
(setq comment-start "/* ")
(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 . +)
;; --- Other stuff ---
(mdw-csharp-style)
- (modify-syntax-entry ?_ "w")
(setq c-hanging-comment-ender-p nil)
(setq c-backslash-column 72)
(setq comment-start "/* ")
(defun mdw-awk-style ()
(c-add-style "[mdw] Awk style"
'((c-basic-offset . 2)
- (c-tab-always-indent . nil)
(c-offsets-alist (substatement-open . 0)
(statement-cont . 0)
(statement-case-intro . +)))
;; --- Miscellaneous fiddling ---
- (modify-syntax-entry ?_ "w")
(mdw-awk-style)
(setq c-backslash-column 72)
(mdw-standard-fill-prefix "\\([ \t]*#+[ \t]*\\)")
;; --- Perl indentation style ---
-(setq cperl-tab-always-indent nil)
-
(setq cperl-indent-level 2)
(setq cperl-continued-statement-offset 2)
(setq cperl-continued-brace-offset 0)
;; --- Miscellaneous fiddling ---
- (modify-syntax-entry ?_ "w")
(modify-syntax-entry ?$ "\\")
(modify-syntax-entry ?$ "\\" font-lock-syntax-table)
(mdw-standard-fill-prefix "\\([ \t]*#+[ \t]*\\)")
;; --- Miscellaneous fiddling ---
- (modify-syntax-entry ?_ "w")
(mdw-standard-fill-prefix "\\([ \t]*#+[ \t]*\\)")
;; --- Now define fontification things ---
(local-set-key [?\C-m] 'mdw-rexx-indent-newline-indent)
(local-set-key [?*] 'mdw-rexx-electric-*)
(mapcar #'(lambda (ch) (modify-syntax-entry ch "w"))
- '(?. ?! ?? ?_ ?# ?@ ?$))
+ '(?! ?? ?# ?@ ?$))
(mdw-standard-fill-prefix "\\([ \t]*/?\*[ \t]*\\)")
;; --- Set up keywords and things for fontification ---
(setq rexx-indent 2)
(setq rexx-end-indent rexx-indent)
- (setq rexx-tab-always-indent nil)
(setq rexx-cont-indent rexx-indent)
(make-local-variable 'font-lock-keywords)
;; --- Make underscore an honorary letter ---
- (modify-syntax-entry ?_ "w")
(modify-syntax-entry ?' "w")
;; --- Set fill prefix ---
;; --- Fiddle with syntax table to get comments right ---
- (modify-syntax-entry ?_ "w")
(modify-syntax-entry ?' "\"")
(modify-syntax-entry ?- ". 123")
(modify-syntax-entry ?{ ". 1b")
(list "\\(\\s.\\|\\s(\\|\\s)\\|\\s\\\\|\\s/\\)"
'(0 mdw-punct-face))))))
+;;;----- Erlang configuration -----------------------------------------------
+
+(setq erlang-electric-commannds
+ '(erlang-electric-newline erlang-electric-semicolon))
+
+(defun mdw-fontify-erlang ()
+
+ ;; --- Set fill prefix ---
+
+ (mdw-standard-fill-prefix "\\([ \t]*{?%*[ \t]*\\)")
+
+ ;; --- Fiddle with fontification ---
+
+ (make-local-variable 'font-lock-keywords)
+ (let ((erlang-keywords
+ (mdw-regexps "after" "and" "andalso"
+ "band" "begin" "bnot" "bor" "bsl" "bsr" "bxor"
+ "case" "catch" "cond"
+ "div" "end" "fun" "if" "let" "not"
+ "of" "or" "orelse"
+ "query" "receive" "rem" "try" "when" "xor")))
+
+ (setq font-lock-keywords
+ (list
+ (list "%.*$"
+ '(0 font-lock-comment-face))
+ (list (concat "\\<\\(" erlang-keywords "\\)\\>")
+ '(0 font-lock-keyword-face))
+ (list (concat "^-\\sw+\\>")
+ '(0 font-lock-keyword-face))
+ (list "\\<[0-9]+\\(\\|#[0-9a-zA-Z]+\\|[eE][+-]?[0-9]+\\)\\>"
+ '(0 mdw-number-face))
+ (list "\\(\\s.\\|\\s(\\|\\s)\\|\\s\\\\|\\s/\\)"
+ '(0 mdw-punct-face))))))
+
;;;----- Texinfo configuration ----------------------------------------------
(defun mdw-fontify-texinfo ()
(defun message-mode-guts ()
(setq messages-mode-syntax-table (make-syntax-table))
(set-syntax-table messages-mode-syntax-table)
- (modify-syntax-entry ?_ "w" messages-mode-syntax-table)
- (modify-syntax-entry ?- "w" messages-mode-syntax-table)
(modify-syntax-entry ?0 "w" messages-mode-syntax-table)
(modify-syntax-entry ?1 "w" messages-mode-syntax-table)
(modify-syntax-entry ?2 "w" messages-mode-syntax-table)
"\\([ \t]*\\([>#|:] ?\\)*[ \t]*\\)" 3)
(auto-fill-mode 1))
+;;;----- Outline mode -------------------------------------------------------
+
+(defun mdw-outline-collapse-all ()
+ "Completely collapse everything in the entire buffer."
+ (interactive)
+ (save-excursion
+ (goto-char (point-min))
+ (while (< (point) (point-max))
+ (hide-subtree)
+ (forward-line))))
+
;;;----- Shell mode ---------------------------------------------------------
(defun mdw-sh-mode-setup ()