;;; -*- mode: emacs-lisp; coding: utf-8 -*-
;;;
-;;; $Id$
-;;;
;;; Functions and macros for .emacs
;;;
;;; (c) 2004 Mark Wooding
"Whether .emacs should optimize for rapid startup.
This may be at the expense of cool features.")
(let ((probe nil) (next command-line-args))
- (message "probe = %s" probe)
- (message "next = %s" next)
(while next
(cond ((string= (car next) "--mdw-fast-startup")
(setq mdw-fast-startup t)
"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 ((and (buffer-file-name)
+ (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)))
(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)
(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
(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)
(setq comment-column 40)
(auto-fill-mode 1)
(setq fill-column 77)
(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 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)
- (woman-bold-face :weight bold)
- (woman-italic-face :slant italic)
+ (woman-bold :weight bold)
+ (woman-italic :slant italic)
(diff-index :weight bold)
(diff-file-header :weight bold)
(diff-hunk-header :foreground "SkyBlue1")
(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 ---
"del" "elif" "else" "except" "exec" "finally" "for"
"from" "global" "if" "import" "in" "is" "lambda"
"not" "or" "pass" "print" "raise" "return" "try"
- "while" "yield")))
+ "while" "with" "yield")))
(setq font-lock-keywords
(list
(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")
(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)