"Save match data around the `markdown-mode' `after-change-functions' hook."
(save-match-data ad-do-it))
+;; Bug fix for `bbdb-canonicalize-address': on Emacs 24, `run-hook-with-args'
+;; always returns nil, with the result that all email addresses are lost.
+;; Replace the function entirely.
+(defadvice bbdb-canonicalize-address
+ (around mdw-bug-fix activate compile)
+ "Don't use `run-hook-with-args', because that doesn't work."
+ (let ((net (ad-get-arg 0)))
+
+ ;; Make sure this is a proper hook list.
+ (if (functionp bbdb-canonicalize-net-hook)
+ (setq bbdb-canonicalize-net-hook (list bbdb-canonicalize-net-hook)))
+
+ ;; Iterate over the hooks until things converge.
+ (let ((donep nil))
+ (while (not donep)
+ (let (next (changep nil)
+ hook (hooks bbdb-canonicalize-net-hook))
+ (while hooks
+ (setq hook (pop hooks))
+ (setq next (funcall hook net))
+ (if (not (equal next net))
+ (setq changep t
+ net next)))
+ (setq donep (not changep)))))
+ (setq ad-return-value net)))
+
;; Transient mark mode hacks.
(defadvice exchange-point-and-mark
;; Functions for sexp diary entries.
+(defun mdw-not-org-mode (form)
+ "As FORM, but not in Org mode agenda."
+ (and (not mdw-diary-for-org-mode-p)
+ (eval form)))
+
(defun mdw-weekday (l)
"Return non-nil if `date' falls on one of the days of the week in L.
L is a list of day numbers (from 0 to 6 for Sunday through to
(memq (nth d '(sunday monday tuesday wednesday
thursday friday saturday)) l))))
+(defun mdw-discordian-date (date)
+ "Return the Discordian calendar date corresponding to DATE.
+
+The return value is (YOLD . st-tibs-day) or (YOLD SEASON DAYNUM DOW).
+
+The original is by David Pearson. I modified it to produce date components
+as output rather than a string."
+ (let* ((days ["Sweetmorn" "Boomtime" "Pungenday"
+ "Prickle-Prickle" "Setting Orange"])
+ (months ["Chaos" "Discord" "Confusion"
+ "Bureaucracy" "Aftermath"])
+ (day-count [0 31 59 90 120 151 181 212 243 273 304 334])
+ (year (- (extract-calendar-year date) 1900))
+ (month (1- (extract-calendar-month date)))
+ (day (1- (extract-calendar-day date)))
+ (julian (+ (aref day-count month) day))
+ (dyear (+ year 3066)))
+ (if (and (= month 1) (= day 28))
+ (cons dyear 'st-tibs-day)
+ (list dyear
+ (aref months (floor (/ julian 73)))
+ (1+ (mod julian 73))
+ (aref days (mod julian 5))))))
+
+(defun mdw-diary-discordian-date ()
+ "Convert the date in `date' to a string giving the Discordian date."
+ (let* ((ddate (mdw-discordian-date date))
+ (tail (format "in the YOLD %d" (car ddate))))
+ (if (eq (cdr ddate) 'st-tibs-day)
+ (format "St Tib's Day %s" tail)
+ (let ((season (cadr ddate))
+ (daynum (caddr ddate))
+ (dayname (cadddr ddate)))
+ (format "%s, the %d%s day of %s %s"
+ dayname
+ daynum
+ (let ((ldig (mod daynum 10)))
+ (cond ((= ldig 1) "st")
+ ((= ldig 2) "nd")
+ ((= ldig 3) "rd")
+ (t "th")))
+ season
+ tail)))))
+
(defun mdw-todo (&optional when)
"Return non-nil today, or on WHEN, whichever is later."
(let ((w (calendar-absolute-from-gregorian (calendar-current-date)))
(nth 2 when))))))))
(eq w d)))
+(defvar mdw-diary-for-org-mode-p nil)
+
+(defadvice org-agenda-list (around mdw-preserve-links activate)
+ (let ((mdw-diary-for-org-mode-p t))
+ ad-do-it))
+
+(defadvice diary-add-to-list (before mdw-trim-leading-space activate)
+ "Trim leading space from the diary entry string."
+ (save-match-data
+ (let ((str (ad-get-arg 1)))
+ (ad-set-arg 1
+ (cond ((null str) nil)
+ ((and mdw-diary-for-org-mode-p
+ (string-match (concat
+ "^[ \t]*"
+ "\\(" diary-time-regexp
+ "\\(-" diary-time-regexp "\\)?"
+ "\\)[ \t]+")
+ str))
+ (replace-match "\\1 " nil nil str))
+ ((string-match "^[ \t]+" str)
+ (replace-match "" nil nil str))
+ ((and (not mdw-diary-for-org-mode-p)
+ (string-match "\\[\\[[^][]*]\\[\\([^][]*\\)]]"
+ str))
+ (replace-match "\\1" nil nil str))
+ (t str))))))
+
;; Fighting with Org-mode's evil key maps.
(defvar mdw-evil-keymap-keys
(setenv "REAL_MOVEMAIL" try))
(setq path (cdr path)))))
+;; AUTHINFO GENERIC kludge.
+
+(defvar nntp-authinfo-generic nil
+ "Set to the `NNTPAUTH' string to pass on to `authinfo-kludge'.
+
+Use this to arrange for per-server settings.")
+
+(defun nntp-open-authinfo-kludge (buffer)
+ "Open a connection to SERVER using `authinfo-kludge'."
+ (let ((proc (start-process "nntpd" buffer
+ "env" (concat "NNTPAUTH="
+ (or nntp-authinfo-generic
+ (getenv "NNTPAUTH")
+ (error "NNTPAUTH unset")))
+ "authinfo-kludge" nntp-address)))
+ (set-buffer buffer)
+ (nntp-wait-for-string "^\r*200")
+ (beginning-of-line)
+ (delete-region (point-min) (point))
+ proc))
+
(eval-after-load "erc"
'(load "~/.ercrc.el"))
;;;--------------------------------------------------------------------------
;;; General fontification.
+(make-face 'mdw-virgin-face)
+
(defmacro mdw-define-face (name &rest body)
"Define a face, and make sure it's actually set as the definition."
(declare (indent 1)
(debug 0))
`(progn
- (make-face ',name)
+ (copy-face 'mdw-virgin-face ',name)
(defvar ,name ',name)
(put ',name 'face-defface-spec ',body)
(face-spec-set ',name ',body nil)))
(t :background "red" :foreground "white" :weight bold))
(mdw-define-face message-cited-text
(default :slant italic)
- (((type tty)) :foreground "green") (t :foreground "SeaGreen1"))
+ (((type tty)) :foreground "cyan") (t :foreground "SkyBlue1"))
(mdw-define-face message-header-cc
- (default :weight bold)
+ (default :slant italic)
(((type tty)) :foreground "green") (t :foreground "SeaGreen1"))
(mdw-define-face message-header-newsgroups
- (default :weight bold)
+ (default :slant italic)
(((type tty)) :foreground "green") (t :foreground "SeaGreen1"))
(mdw-define-face message-header-subject
- (default :weight bold)
(((type tty)) :foreground "green") (t :foreground "SeaGreen1"))
(mdw-define-face message-header-to
- (default :weight bold)
(((type tty)) :foreground "green") (t :foreground "SeaGreen1"))
(mdw-define-face message-header-xheader
- (default :weight bold)
+ (default :slant italic)
(((type tty)) :foreground "green") (t :foreground "SeaGreen1"))
(mdw-define-face message-header-other
- (default :weight bold)
+ (default :slant italic)
(((type tty)) :foreground "green") (t :foreground "SeaGreen1"))
(mdw-define-face message-header-name
+ (default :weight bold)
(((type tty)) :foreground "green") (t :foreground "SeaGreen1"))
+
(mdw-define-face which-func
(t nil))
+(mdw-define-face gnus-header-name
+ (default :weight bold)
+ (((type tty)) :foreground "green") (t :foreground "SeaGreen1"))
+(mdw-define-face gnus-header-subject
+ (((type tty)) :foreground "green") (t :foreground "SeaGreen1"))
+(mdw-define-face gnus-header-from
+ (((type tty)) :foreground "green") (t :foreground "SeaGreen1"))
+(mdw-define-face gnus-header-to
+ (((type tty)) :foreground "green") (t :foreground "SeaGreen1"))
+(mdw-define-face gnus-header-content
+ (default :slant italic)
+ (((type tty)) :foreground "green") (t :foreground "SeaGreen1"))
+
+(mdw-define-face gnus-cite-1
+ (((type tty)) :foreground "cyan") (t :foreground "SkyBlue1"))
+(mdw-define-face gnus-cite-2
+ (((type tty)) :foreground "blue") (t :foreground "RoyalBlue2"))
+(mdw-define-face gnus-cite-3
+ (((type tty)) :foreground "magenta") (t :foreground "MediumOrchid"))
+(mdw-define-face gnus-cite-4
+ (((type tty)) :foreground "red") (t :foreground "firebrick2"))
+(mdw-define-face gnus-cite-5
+ (((type tty)) :foreground "yellow") (t :foreground "burlywood2"))
+(mdw-define-face gnus-cite-6
+ (((type tty)) :foreground "green") (t :foreground "SeaGreen1"))
+(mdw-define-face gnus-cite-7
+ (((type tty)) :foreground "cyan") (t :foreground "SlateBlue1"))
+(mdw-define-face gnus-cite-8
+ (((type tty)) :foreground "blue") (t :foreground "RoyalBlue2"))
+(mdw-define-face gnus-cite-9
+ (((type tty)) :foreground "magenta") (t :foreground "purple2"))
+(mdw-define-face gnus-cite-10
+ (((type tty)) :foreground "red") (t :foreground "DarkOrange2"))
+(mdw-define-face gnus-cite-11
+ (t :foreground "grey"))
+
(mdw-define-face diff-header
(t nil))
(mdw-define-face diff-index
;; Other stuff.
(mdw-c-style)
- (setq c-hanging-comment-ender-p nil)
- (setq c-backslash-column 72)
- (setq c-label-minimum-indentation 0)
- (setq mdw-fill-prefix mdw-c-comment-fill-prefix)
+ (setq c-hanging-comment-ender-p nil
+ c-backslash-column 72
+ c-label-minimum-indentation 0
+ mdw-fill-prefix mdw-c-comment-fill-prefix)
;; Now define things to be fontified.
(make-local-variable 'font-lock-keywords)