((>= width 0) (+ width (mdw-horizontal-window-overhead)))
((< width 0) width))))
+(defun mdw-preferred-column-width ()
+ "Return the preferred column width."
+ (if (and window-system (mdw-emacs-version-p 22)) mdw-column-width
+ (1+ mdw-column-width)))
+
(defun mdw-divvy-window (&optional width)
"Split a wide window into appropriate widths."
(interactive "P")
- (setq width (cond (width (prefix-numeric-value width))
- ((and window-system (mdw-emacs-version-p 22))
- mdw-column-width)
- (t (1+ mdw-column-width))))
+ (setq width (if width (prefix-numeric-value width)
+ (mdw-preferred-column-width)))
(let* ((win (selected-window))
(sb-width (mdw-horizontal-window-overhead))
(c (/ (+ (window-width) sb-width)
(defun mdw-set-frame-width (columns &optional width)
(interactive "nColumns:
P")
- (setq width (cond (width (prefix-numeric-value width))
- ((and window-system (mdw-emacs-version-p 22))
- mdw-column-width)
- (t (1+ mdw-column-width))))
+ (setq width (if width (prefix-numeric-value width)
+ (mdw-preferred-column-width)))
(let ((sb-width (mdw-horizontal-window-overhead)))
(set-frame-width (selected-frame)
(- (* columns (+ width sb-width))
(dolist (key replacements)
(define-key keymap key binding))))))
-(eval-after-load "org-latex"
- '(progn
- (push '("strayman"
- "\\documentclass{strayman}
+(defvar mdw-org-latex-defs
+ '(("strayman"
+ "\\documentclass{strayman}
\\usepackage[utf8]{inputenc}
\\usepackage[palatino, helvetica, courier, maths=cmr]{mdwfonts}
-\\usepackage[T1]{fontenc}
\\usepackage{graphicx, tikz, mdwtab, mdwmath, crypto, longtable}"
- ("\\section{%s}" . "\\section*{%s}")
- ("\\subsection{%s}" . "\\subsection*{%s}")
- ("\\subsubsection{%s}" . "\\subsubsection*{%s}")
- ("\\paragraph{%s}" . "\\paragraph*{%s}")
- ("\\subparagraph{%s}" . "\\subparagraph*{%s}"))
- org-export-latex-classes)))
+ ("\\section{%s}" . "\\section*{%s}")
+ ("\\subsection{%s}" . "\\subsection*{%s}")
+ ("\\subsubsection{%s}" . "\\subsubsection*{%s}")
+ ("\\paragraph{%s}" . "\\paragraph*{%s}")
+ ("\\subparagraph{%s}" . "\\subparagraph*{%s}"))))
+
+(eval-after-load "org-latex"
+ '(setq org-export-latex-classes
+ (append mdw-org-latex-defs org-export-latex-classes)))
+
+(eval-after-load "ox-latex"
+ '(setq org-latex-classes (append mdw-org-latex-defs org-latex-classes)
+ org-latex-default-packages-alist '(("AUTO" "inputenc" t)
+ ("T1" "fontenc" t)
+ ("" "fixltx2e" nil)
+ ("" "graphicx" t)
+ ("" "longtable" nil)
+ ("" "float" nil)
+ ("" "wrapfig" nil)
+ ("" "rotating" nil)
+ ("normalem" "ulem" t)
+ ("" "textcomp" t)
+ ("" "marvosym" t)
+ ("" "wasysym" t)
+ ("" "amssymb" t)
+ ("" "hyperref" nil)
+ "\\tolerance=1000")))
+
(setq org-export-docbook-xslt-proc-command "xsltproc --output %o %s %i"
org-export-docbook-xsl-fo-proc-command "fop %i.safe %o"
org-export-docbook-xslt-stylesheet
"/usr/share/xml/docbook/stylesheet/docbook-xsl/fo/docbook.xsl")
+;; Glasses.
+
+(setq glasses-separator "-"
+ glasses-separate-parentheses-p nil
+ glasses-uncapitalize-p t)
+
;; Some hacks to do with window placement.
(defun mdw-clobber-other-windows-showing-buffer (buffer-or-name)
(eval-after-load "erc"
'(load "~/.ercrc.el"))
+;; Heavy-duty Gnus patching.
+
+(defun mdw-nnimap-transform-headers ()
+ (goto-char (point-min))
+ (let (article lines size string)
+ (block nil
+ (while (not (eobp))
+ (while (not (looking-at "\\* [0-9]+ FETCH"))
+ (delete-region (point) (progn (forward-line 1) (point)))
+ (when (eobp)
+ (return)))
+ (goto-char (match-end 0))
+ ;; Unfold quoted {number} strings.
+ (while (re-search-forward
+ "[^]][ (]{\\([0-9]+\\)}\r?\n"
+ (save-excursion
+ ;; Start of the header section.
+ (or (re-search-forward "] {[0-9]+}\r?\n" nil t)
+ ;; Start of the next FETCH.
+ (re-search-forward "\\* [0-9]+ FETCH" nil t)
+ (point-max)))
+ t)
+ (setq size (string-to-number (match-string 1)))
+ (delete-region (+ (match-beginning 0) 2) (point))
+ (setq string (buffer-substring (point) (+ (point) size)))
+ (delete-region (point) (+ (point) size))
+ (insert (format "%S" (mm-subst-char-in-string ?\n ?\s string)))
+ ;; [mdw] missing from upstream
+ (backward-char 1))
+ (beginning-of-line)
+ (setq article
+ (and (re-search-forward "UID \\([0-9]+\\)" (line-end-position)
+ t)
+ (match-string 1)))
+ (setq lines nil)
+ (setq size
+ (and (re-search-forward "RFC822.SIZE \\([0-9]+\\)"
+ (line-end-position)
+ t)
+ (match-string 1)))
+ (beginning-of-line)
+ (when (search-forward "BODYSTRUCTURE" (line-end-position) t)
+ (let ((structure (ignore-errors
+ (read (current-buffer)))))
+ (while (and (consp structure)
+ (not (atom (car structure))))
+ (setq structure (car structure)))
+ (setq lines (if (and
+ (stringp (car structure))
+ (equal (upcase (nth 0 structure)) "MESSAGE")
+ (equal (upcase (nth 1 structure)) "RFC822"))
+ (nth 9 structure)
+ (nth 7 structure)))))
+ (delete-region (line-beginning-position) (line-end-position))
+ (insert (format "211 %s Article retrieved." article))
+ (forward-line 1)
+ (when size
+ (insert (format "Chars: %s\n" size)))
+ (when lines
+ (insert (format "Lines: %s\n" lines)))
+ ;; Most servers have a blank line after the headers, but
+ ;; Davmail doesn't.
+ (unless (re-search-forward "^\r$\\|^)\r?$" nil t)
+ (goto-char (point-max)))
+ (delete-region (line-beginning-position) (line-end-position))
+ (insert ".")
+ (forward-line 1)))))
+
+(eval-after-load 'nnimap
+ '(defalias 'nnimap-transform-headers
+ (symbol-function 'mdw-nnimap-transform-headers)))
+
;;;--------------------------------------------------------------------------
;;; Utility functions.
(defadvice write-file (after mdw-autorevert activate)
(mdw-check-autorevert))
+(defun mdw-auto-revert ()
+ "Recheck all of the autorevertable buffers, and update VC modelines."
+ (interactive)
+ (let ((auto-revert-check-vc-info t))
+ (auto-revert-buffers)))
+
;;;--------------------------------------------------------------------------
;;; Dired hacking.
(concat (shell-quote-argument (dired-get-filename nil))
" " args)))
+(defadvice dired-do-flagged-delete
+ (around mdw-delete-if-prefix-argument activate compile)
+ (let ((delete-by-moving-to-trash (and (null current-prefix-arg)
+ delete-by-moving-to-trash)))
+ ad-do-it))
+
(eval-after-load "dired"
'(define-key dired-mode-map "X" 'mdw-dired-run))
(w3m-browse-url url new-session-p))
(select-window window)))))
+(eval-after-load 'w3m
+ '(define-key w3m-mode-map [?\e ?\r] 'w3m-view-this-url-new-session))
+
(defvar mdw-good-url-browsers
'(browse-url-chromium
browse-url-mozilla
(defvar mdw-c-comment-fill-prefix
`((,(concat "\\([ \t]*/?\\)"
- "\\(\*\\|//]\\)"
+ "\\(\\*\\|//\\)"
"\\([ \t]*\\)"
"\\([A-Za-z]+:[ \t]*\\)?"
mdw-hanging-indents)
(defun mdw-fontify-java ()
+ ;; Fiddle with some syntax codes.
+ (modify-syntax-entry ?@ ".")
+ (modify-syntax-entry ?@ "." font-lock-syntax-table)
+
;; Other stuff.
(setq mdw-fill-prefix mdw-c-comment-fill-prefix)
;; Now define things to be fontified.
(make-local-variable 'font-lock-keywords)
(let ((java-keywords
- (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" "switch" "synchronized" "throw" "throws"
- "transient" "try" "void" "volatile" "while"))
+ (mdw-regexps "abstract" "assert"
+ "boolean" "break" "byte"
+ "case" "catch" "char" "class" "const" "continue"
+ "default" "do" "double"
+ "else" "enum" "extends"
+ "final" "finally" "float" "for"
+ "goto"
+ "if" "implements" "import" "instanceof" "int"
+ "interface"
+ "long"
+ "native" "new"
+ "package" "private" "protected" "public"
+ "return"
+ "short" "static" "strictfp" "switch" "synchronized"
+ "throw" "throws" "transient" "try"
+ "void" "volatile"
+ "while"))
(java-constants
(mdw-regexps "false" "null" "super" "this" "true")))
"[lLfFdD]?")
'(0 mdw-number-face))
- ;; Identifiers with trailing operators.
- (list (concat "_\\(" punctuation "\\)+")
- '(0 mdw-trivial-face))
-
;; And everything else is punctuation.
(list "\\(\\s.\\|\\s(\\|\\s)\\|\\s\\\\|\\s/\\)"
'(0 mdw-punct-face)))
"const" "continue" "create"
"do"
"else" "enum" "extern"
- "false" "final" "fn" "for"
+ "final" "fn" "for"
"if" "impl" "in"
"let" "loop"
"macro" "match" "mod" "move" "mut"
"offsetof" "override"
- "priv" "pub" "pure"
+ "priv" "proc" "pub" "pure"
"ref" "return"
- "self" "sizeof" "static" "struct" "super"
- "true" "trait" "type" "typeof"
+ "sizeof" "static" "struct" "super"
+ "trait" "type" "typeof"
"unsafe" "unsized" "use"
"virtual"
"where" "while"
"f32" "f64"
"i8" "i16" "i32" "i64" "isize"
"u8" "u16" "u32" "u64" "usize"
- "char" "str")))
+ "char" "str"
+ "self" "Self")))
(setq font-lock-keywords
(list
(modify-syntax-entry ?. "w")
(modify-syntax-entry ?\n ">")
(setf fill-prefix nil)
+ (modify-syntax-entry ?. "_")
+ (modify-syntax-entry ?* ". 23")
+ (modify-syntax-entry ?/ ". 124b")
+ (modify-syntax-entry ?\n "> b")
(local-set-key ";" 'self-insert-command)
(mdw-standard-fill-prefix "\\([ \t]*;+[ \t]*\\)"))
(defun mdw-asm-set-comment ()
(modify-syntax-entry ?; "."
)
- (modify-syntax-entry asm-comment-char "<b")
+ (modify-syntax-entry asm-comment-char "< b")
(setq comment-start (string asm-comment-char ? )))
(add-hook 'asm-mode-local-variables-hook 'mdw-asm-set-comment)
(put 'asm-comment-char 'safe-local-variable 'characterp)
(list "[$^_{}#&]"
'(0 mdw-punct-face)))))
+(setq TeX-install-font-lock 'tex-font-setup)
+
(eval-after-load 'font-latex
'(defun font-latex-jit-lock-force-redisplay (buf start end)
"Compatibility for Emacsen not offering `jit-lock-force-redisplay'."
(ansi-term (list "ssh" host) (format "ssh@%s" host)))
(defvar git-grep-command
- "env PAGER=cat git grep --no-color -nH -e "
+ "env GIT_PAGER=cat git grep --no-color -nH -e "
"*The default command for \\[git-grep].")
(defvar git-grep-history nil)
(interactive
(list (read-shell-command "Run git grep (like this): "
git-grep-command 'git-grep-history)))
- (grep command-args))
+ (let ((grep-use-null-device nil))
+ (grep command-args)))
;;;--------------------------------------------------------------------------
;;; Magit configuration.
(magit-wip-after-apply-mode 1)
(magit-wip-before-change-mode 1)
(add-to-list 'magit-no-confirm 'safe-with-wip)
+ (add-to-list 'magit-no-confirm 'trash)
(push '(:eval (if (or magit-wip-after-save-local-mode
magit-wip-after-apply-mode
magit-wip-before-change-mode)
(around mdw-just-this-buffer activate compile)
(let ((magit-save-repository-buffers nil)) ad-do-it))
+(defadvice magit-discard
+ (around mdw-delete-if-prefix-argument activate compile)
+ (let ((magit-delete-by-moving-to-trash
+ (and (null current-prefix-arg)
+ magit-delete-by-moving-to-trash)))
+ ad-do-it))
+
(setq magit-repolist-columns
'(("Name" 16 magit-repolist-column-ident nil)
("Version" 18 magit-repolist-column-version nil)
(smerge-mode 1))))
(add-hook 'find-file-hook 'mdw-try-smerge t)
+;;;--------------------------------------------------------------------------
+;;; GUD, and especially GDB.
+
+;; Inhibit window dedication. I mean, seriously, wtf?
+(defadvice gdb-display-buffer (after mdw-undedicated (buf) compile activate)
+ "Don't make windows dedicated. Seriously."
+ (set-window-dedicated-p ad-return-value nil))
+(defadvice gdb-set-window-buffer
+ (after mdw-undedicated (name &optional ignore-dedicated window)
+ compile activate)
+ "Don't make windows dedicated. Seriously."
+ (set-window-dedicated-p (or window (selected-window)) nil))
+
;;;--------------------------------------------------------------------------
;;; MPC configuration.