(interactive)
(error "wrong button"))
+(defun mdw-emacs-version-p (major &optional minor)
+ "Return non-nil if the running Emacs is at least version MAJOR.MINOR."
+ (or (> emacs-major-version major)
+ (and (= emacs-major-version major)
+ (>= emacs-minor-version (or minor 0)))))
+
;; Some error trapping.
;;
;; If individual bits of this file go tits-up, we don't particularly want
"Split a wide window into appropriate widths."
(interactive "P")
(setq width (cond (width (prefix-numeric-value width))
- ((and window-system
- (>= emacs-major-version 22))
+ ((and window-system (mdw-emacs-version-p 22))
77)
(t 78)))
(let* ((win (selected-window))
(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)))
+(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)))
+ (if (and str (string-match "^[ \t]+" str))
+ (let ((new (replace-match "" nil nil str)))
+ (ad-set-arg 1 new))))))
+
;; Fighting with Org-mode's evil key maps.
(defvar mdw-evil-keymap-keys
(((type w32)) :family "courier new" :height 85)
(((type x)) :family "6x13" :foundry "trad" :height 130)
(t :foreground "white" :background "black"))
-(if (>= emacs-major-version 23)
+(if (mdw-emacs-version-p 23)
(mdw-define-face variable-pitch
(((type x)) :family "sans" :height 100))
(mdw-define-face variable-pitch
(t :foreground "SkyBlue1"))
(mdw-define-face magit-item-highlight
(((type tty)) :background "blue")
- (t :background "DarkSeaGreen4"))
+ (t :background "grey11"))
(mdw-define-face magit-log-head-label-remote
(((type tty)) :background "cyan" :foreground "green")
(t :background "grey11" :foreground "DarkSeaGreen2" :box t))
;; Now define things to be fontified.
(make-local-variable 'font-lock-keywords)
(let ((c-keywords
- (mdw-regexps "and" ;C++, C95 macro
+ (mdw-regexps "alignas" ;C11 macro, C++11
+ "alignof" ;C++11
+ "and" ;C++, C95 macro
"and_eq" ;C++, C95 macro
"asm" ;K&R, C++, GCC
+ "atomic" ;C11 macro, C++11 template type
"auto" ;K&R, C89
"bitand" ;C++, C95 macro
"bitor" ;C++, C95 macro
"case" ;K&R, C89
"catch" ;C++
"char" ;K&R, C89
+ "char16_t" ;C++11, C11 library type
+ "char32_t" ;C++11, C11 library type
"class" ;C++
"complex" ;C99 macro, C++ template type
"compl" ;C++, C95 macro
"const" ;C89
+ "constexpr" ;C++11
"const_cast" ;C++
"continue" ;K&R, C89
+ "decltype" ;C++11
"defined" ;C89 preprocessor
"default" ;K&R, C89
"delete" ;C++
"mutable" ;C++
"namespace" ;C++
"new" ;C++
+ "noexcept" ;C++11
+ "noreturn" ;C11 macro
"not" ;C++, C95 macro
"not_eq" ;C++, C95 macro
+ "nullptr" ;C++11
"operator" ;C++
"or" ;C++, C95 macro
"or_eq" ;C++, C95 macro
"signed" ;C89
"sizeof" ;K&R, C89
"static" ;K&R, C89
+ "static_assert" ;C11 macro, C++11
"static_cast" ;C++
"struct" ;K&R, C89
"switch" ;K&R, C89
"template" ;C++
"throw" ;C++
"try" ;C++
- "this" ;C++
+ "thread_local" ;C11 macro, C++11
"typedef" ;C89
"typeid" ;C++
"typeof" ;GCC
"while" ;K&R, C89
"xor" ;C++, C95 macro
"xor_eq" ;C++, C95 macro
+ "_Alignas" ;C11
+ "_Alignof" ;C11
+ "_Atomic" ;C11
"_Bool" ;C99
"_Complex" ;C99
+ "_Generic" ;C11
"_Imaginary" ;C99
+ "_Noreturn" ;C11
"_Pragma" ;C99 preprocessor
+ "_Static_assert" ;C11
+ "_Thread_local" ;C11
"__alignof__" ;GCC
"__asm__" ;GCC
"__attribute__" ;GCC
(modify-syntax-entry ?$ "." font-lock-syntax-table)
(local-set-key [?$] 'self-insert-command)
+ ;; Make `tab' be useful, given that tab stops in TeX don't work well.
+ (local-set-key "\C-i" 'indent-relative)
+ (setq indent-tabs-mode nil)
+
;; Set fill prefix.
(mdw-standard-fill-prefix "\\([ \t]*%+[ \t]*\\)")