el/dot-emacs.el: Hack Org mode package list.
[profile] / el / dot-emacs.el
index 63f6e9d..17ca3bb 100644 (file)
@@ -217,6 +217,19 @@ fringes is not taken out of the allowance for WIDTH, unlike
       (other-window 1))
     (select-window win)))
 
+(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))))
+  (let ((sb-width (mdw-horizontal-window-overhead)))
+    (set-frame-width (selected-frame)
+                    (- (* columns (+ width sb-width))
+                       sb-width))
+    (mdw-divvy-window width)))
+
 ;; Don't raise windows unless I say so.
 
 (defvar mdw-inhibit-raise-frame nil
@@ -293,56 +306,6 @@ it's currently off."
         (or transient-mark-mode (setq transient-mark-mode 'only))
         (set-mark (mark t)))))
 
-;; Improved compilation machinery.
-
-(setq compile-command
-      (let ((ncpu (with-temp-buffer
-                   (insert-file-contents "/proc/cpuinfo")
-                   (buffer-string)
-                   (count-matches "^processor\\s-*:"))))
-       (format "make -j%d -k" (* 2 ncpu))))
-
-(defun mdw-compilation-buffer-name (mode)
-  (concat "*" (downcase mode) ": "
-         (abbreviate-file-name default-directory) "*"))
-(setq compilation-buffer-name-function 'mdw-compilation-buffer-name)
-
-(eval-after-load "compile"
-  '(progn
-     (define-key compilation-shell-minor-mode-map "\C-c\M-g" 'recompile)))
-
-(defun mdw-compile (command &optional directory comint)
-  "Initiate a compilation COMMAND, maybe in a different DIRECTORY.
-The DIRECTORY may be nil to not change.  If COMINT is t, then
-start an interactive compilation.
-
-Interactively, prompt for the command if the variable
-`compilation-read-command' is non-nil, or if requested through
-the prefix argument.  Prompt for the directory, and run
-interactively, if requested through the prefix.
-
-Use a prefix of 4, 6, 12, or 14, or type C-u between one and three times, to
-force prompting for a directory.
-
-Use a prefix of 2, 6, 10, or 14, or type C-u three times, to force
-prompting for the command.
-
-Use a prefix of 8, 10, 12, or 14, or type C-u twice or three times,
-to force interactive compilation."
-  (interactive
-   (let* ((prefix (prefix-numeric-value current-prefix-arg))
-         (command (eval compile-command))
-         (dir (and (plusp (logand prefix #x54))
-                   (read-directory-name "Compile in directory: "))))
-     (list (if (or compilation-read-command
-                  (plusp (logand prefix #x42)))
-              (compilation-read-command command)
-            command)
-          dir
-          (plusp (logand prefix #x58)))))
-  (let ((default-directory (or directory default-directory)))
-    (compile command comint)))
-
 ;; Functions for sexp diary entries.
 
 (defun mdw-not-org-mode (form)
@@ -507,20 +470,40 @@ Evil key bindings are defined in `mdw-evil-keymap-keys'."
        (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"
@@ -565,6 +548,114 @@ Pretend they don't exist.  They might be on other display devices."
   (ad-set-arg 2 nil))
 
 ;;;--------------------------------------------------------------------------
+;;; Improved compilation machinery.
+
+;; Uprated version of M-x compile.
+
+(setq compile-command
+      (let ((ncpu (with-temp-buffer
+                   (insert-file-contents "/proc/cpuinfo")
+                   (buffer-string)
+                   (count-matches "^processor\\s-*:"))))
+       (format "make -j%d -k" (* 2 ncpu))))
+
+(defun mdw-compilation-buffer-name (mode)
+  (concat "*" (downcase mode) ": "
+         (abbreviate-file-name default-directory) "*"))
+(setq compilation-buffer-name-function 'mdw-compilation-buffer-name)
+
+(eval-after-load "compile"
+  '(progn
+     (define-key compilation-shell-minor-mode-map "\C-c\M-g" 'recompile)))
+
+(defadvice compile (around hack-environment compile activate)
+  "Hack the environment inherited by inferiors in the compilation."
+  (let ((process-environment process-environment))
+    (setenv "LD_PRELOAD" nil)
+    ad-do-it))
+
+(defun mdw-compile (command &optional directory comint)
+  "Initiate a compilation COMMAND, maybe in a different DIRECTORY.
+The DIRECTORY may be nil to not change.  If COMINT is t, then
+start an interactive compilation.
+
+Interactively, prompt for the command if the variable
+`compilation-read-command' is non-nil, or if requested through
+the prefix argument.  Prompt for the directory, and run
+interactively, if requested through the prefix.
+
+Use a prefix of 4, 6, 12, or 14, or type C-u between one and three times, to
+force prompting for a directory.
+
+Use a prefix of 2, 6, 10, or 14, or type C-u three times, to force
+prompting for the command.
+
+Use a prefix of 8, 10, 12, or 14, or type C-u twice or three times,
+to force interactive compilation."
+  (interactive
+   (let* ((prefix (prefix-numeric-value current-prefix-arg))
+         (command (eval compile-command))
+         (dir (and (plusp (logand prefix #x54))
+                   (read-directory-name "Compile in directory: "))))
+     (list (if (or compilation-read-command
+                  (plusp (logand prefix #x42)))
+              (compilation-read-command command)
+            command)
+          dir
+          (plusp (logand prefix #x58)))))
+  (let ((default-directory (or directory default-directory)))
+    (compile command comint)))
+
+;; Flymake support.
+
+(defun mdw-find-build-dir (build-file)
+  (catch 'found
+    (let* ((src-dir (file-name-as-directory (expand-file-name ".")))
+          (dir src-dir))
+      (loop
+       (when (file-exists-p (concat dir build-file))
+         (throw 'found dir))
+       (let ((sub (expand-file-name (file-relative-name src-dir dir)
+                                    (concat dir "build/"))))
+         (catch 'give-up
+           (loop
+             (when (file-exists-p (concat sub build-file))
+               (throw 'found sub))
+             (when (string= sub dir) (throw 'give-up nil))
+             (setq sub (file-name-directory (directory-file-name sub))))))
+       (when (string= dir
+                      (setq dir (file-name-directory
+                                 (directory-file-name dir))))
+         (throw 'found nil))))))
+
+(defun mdw-flymake-make-init ()
+  (let ((build-dir (mdw-find-build-dir "Makefile")))
+    (and build-dir
+        (let ((tmp-src (flymake-init-create-temp-buffer-copy
+                        #'flymake-create-temp-inplace)))
+          (flymake-get-syntax-check-program-args
+           tmp-src build-dir t t
+           #'flymake-get-make-cmdline)))))
+
+(setq flymake-allowed-file-name-masks
+      '(("\\.\\(?:[cC]\\|cc\\|cpp\\|cxx\\|c\\+\\+\\)\\'"
+        mdw-flymake-make-init)
+       ("\\.\\(?:[hH]\\|hh\\|hpp\\|hxx\\|h\\+\\+\\)\\'"
+        mdw-flymake-master-make-init)
+       ("\\.p[lm]" flymake-perl-init)))
+
+(setq flymake-mode-map
+      (let ((map (if (boundp 'flymake-mode-map)
+                    flymake-mode-map
+                  (make-sparse-keymap))))
+       (define-key map [?\C-c ?\C-f ?\C-p] 'flymake-goto-prev-error)
+       (define-key map [?\C-c ?\C-f ?\C-n] 'flymake-goto-next-error)
+       (define-key map [?\C-c ?\C-f ?\C-c] 'flymake-compile)
+       (define-key map [?\C-c ?\C-f ?\C-k] 'flymake-stop-all-syntax-checks)
+       (define-key map [?\C-c ?\C-f ?\C-e] 'flymake-popup-current-error-menu)
+       map))
+
+;;;--------------------------------------------------------------------------
 ;;; Mail and news hacking.
 
 (define-derived-mode  mdwmail-mode mail-mode "[mdw] mail"
@@ -659,7 +750,7 @@ Use this to arrange for per-server settings.")
     proc))
 
 (eval-after-load "erc"
-    '(load "~/.ercrc.el"))
+  '(load "~/.ercrc.el"))
 
 ;;;--------------------------------------------------------------------------
 ;;; Utility functions.
@@ -849,7 +940,8 @@ If NEW-SESSION-P, start a new session."
        (select-window window)))))
 
 (defvar mdw-good-url-browsers
-  '(browse-url-mozilla
+  '(browse-url-chromium
+    browse-url-mozilla
     browse-url-generic
     (w3m . mdw-w3m-browse-url)
     browse-url-w3)
@@ -938,10 +1030,6 @@ It in turn is a list of things:
   "*Standard regexp matching parts of a hanging indent.
 This is mainly useful in `auto-fill-mode'.")
 
-;; Setting things up.
-
-(fset 'mdw-do-auto-fill (symbol-function 'do-auto-fill))
-
 ;; Utility functions.
 
 (defun mdw-maybe-tabify (s)
@@ -959,11 +1047,11 @@ This is mainly useful in `auto-fill-mode'.")
 context and return the static fill prefix to use.  Point must be
 at the start of a line, and match data must be saved."
   (cond ((not l) nil)
-              ((looking-at (car (car l)))
-               (mdw-maybe-tabify (apply #'concat
-                                        (mapcar #'mdw-do-prefix-match
-                                                (cdr (car l))))))
-              (t (mdw-examine-fill-prefixes (cdr l)))))
+       ((looking-at (car (car l)))
+        (mdw-maybe-tabify (apply #'concat
+                                 (mapcar #'mdw-do-prefix-match
+                                         (cdr (car l))))))
+       (t (mdw-examine-fill-prefixes (cdr l)))))
 
 (defun mdw-maybe-car (p)
   "If P is a pair, return (car P), otherwise just return P."
@@ -982,26 +1070,26 @@ at the start of a line, and match data must be saved."
   "Expand a dynamic prefix match element.
 See `mdw-fill-prefix' for details."
   (cond ((not (consp m)) (format "%s" m))
-          ((eq (car m) 'match) (match-string (mdw-maybe-car (cdr m))))
-          ((eq (car m) 'pad) (mdw-padding (match-string
-                                           (mdw-maybe-car (cdr m)))))
-          ((eq (car m) 'eval) (eval (cdr m)))
-          (t "")))
+       ((eq (car m) 'match) (match-string (mdw-maybe-car (cdr m))))
+       ((eq (car m) 'pad) (mdw-padding (match-string
+                                        (mdw-maybe-car (cdr m)))))
+       ((eq (car m) 'eval) (eval (cdr m)))
+       (t "")))
 
 (defun mdw-choose-dynamic-fill-prefix ()
   "Work out the dynamic fill prefix based on the variable `mdw-fill-prefix'."
   (cond ((and fill-prefix (not (string= fill-prefix ""))) fill-prefix)
-          ((not mdw-fill-prefix) fill-prefix)
-          (t (save-excursion
-               (beginning-of-line)
-               (save-match-data
-                 (mdw-examine-fill-prefixes mdw-fill-prefix))))))
+       ((not mdw-fill-prefix) fill-prefix)
+       (t (save-excursion
+            (beginning-of-line)
+            (save-match-data
+              (mdw-examine-fill-prefixes mdw-fill-prefix))))))
 
-(defun do-auto-fill ()
+(defadvice do-auto-fill (around mdw-dynamic-fill-prefix () activate compile)
   "Handle auto-filling, working out a dynamic fill prefix in the
 case where there isn't a sensible static one."
   (let ((fill-prefix (mdw-choose-dynamic-fill-prefix)))
-    (mdw-do-auto-fill)))
+    ad-do-it))
 
 (defun mdw-fill-paragraph ()
   "Fill paragraph, getting a dynamic fill prefix."
@@ -1015,9 +1103,9 @@ This is just a short-cut for setting the thing by hand, and by
 design it doesn't cope with anything approximating a complicated
 case."
   (setq mdw-fill-prefix
-          `((,(concat rx mdw-hanging-indents)
-             (match . 1)
-             (pad . ,(or mat 2))))))
+       `((,(concat rx mdw-hanging-indents)
+          (match . 1)
+          (pad . ,(or mat 2))))))
 
 ;;;--------------------------------------------------------------------------
 ;;; Other common declarations.
@@ -1042,8 +1130,7 @@ case."
   (and mdw-auto-indent
        (cond ((eq major-mode 'lisp-mode)
              (local-set-key "\C-m" 'mdw-indent-newline-and-indent))
-            ((or (eq major-mode 'slime-repl-mode)
-                 (eq major-mode 'asm-mode))
+            ((derived-mode-p 'slime-repl-mode 'asm-mode 'comint-mode)
              nil)
             (t
              (local-set-key "\C-m" 'newline-and-indent))))
@@ -1478,6 +1565,18 @@ doesn't match any of the regular expressions in
 (mdw-define-face magit-diff-removed-highlight
   (((min-colors 64)) :foreground "#eecccc" :background "#663333")
   (((class color)) :foreground "red" :background "blue"))
+(mdw-define-face magit-blame-heading
+  (((min-colors 64)) :foreground "white" :background "grey25"
+                    :weight normal :slant normal)
+  (((class color)) :foreground "white" :background "blue"
+                  :weight normal :slant normal))
+(mdw-define-face magit-blame-name
+  (t :inherit magit-blame-heading :slant italic))
+(mdw-define-face magit-blame-date
+  (((min-colors 64)) :inherit magit-blame-heading :foreground "grey60")
+  (((class color)) :inherit magit-blame-heading :foreground "cyan"))
+(mdw-define-face magit-blame-summary
+  (t :inherit magit-blame-heading :weight bold))
 
 (mdw-define-face dylan-header-background
   (((min-colors 64)) :background "NavyBlue")
@@ -3296,6 +3395,9 @@ strip numbers instead."
           (unless modified
             (restore-buffer-modified-p nil)))))))
 
+(setq LaTeX-syntactic-comments nil
+      LaTeX-fill-break-at-separators '(\\\[))
+
 ;;;--------------------------------------------------------------------------
 ;;; SGML hacking.
 
@@ -3456,6 +3558,9 @@ that character only to be normal punctuation.")
 (mdw-define-face eshell-ls-readonly (t nil))
 (mdw-define-face eshell-ls-symlink (t :foreground "cyan"))
 
+(defun mdw-eshell-hack () (setenv "LD_PRELOAD" nil))
+(add-hook 'eshell-mode-hook 'mdw-eshell-hack)
+
 ;;;--------------------------------------------------------------------------
 ;;; Messages-file mode.
 
@@ -3719,6 +3824,15 @@ that character only to be normal punctuation.")
   (and mdw-auto-indent
        (indent-for-tab-command)))
 
+(defadvice comint-line-beginning-position
+    (around mdw-calculate-it-properly () activate compile)
+  "Calculate the actual line start for multi-line input."
+  (if (or comint-use-prompt-regexp
+         (eq (field-at-pos (point)) 'output))
+      ad-do-it
+    (setq ad-return-value
+         (constrain-to-field (line-beginning-position) (point)))))
+
 (defun mdw-setup-m4 ()
 
   ;; Inexplicably, Emacs doesn't match braces in m4 mode.  This is very
@@ -3801,6 +3915,18 @@ This allows you to pass a list of arguments through `ansi-term'."
          (ad-set-arg 2 (car program))
          (ad-set-arg 4 (cdr program))))))
 
+(defadvice term-exec-1 (around hack-environment compile activate)
+  "Hack the environment inherited by inferiors in the terminal."
+  (let ((process-environment process-environment))
+    (setenv "LD_PRELOAD" nil)
+    ad-do-it))
+
+(defadvice shell (around hack-environment compile activate)
+  "Hack the environment inherited by inferiors in the shell."
+  (let ((process-environment process-environment))
+    (setenv "LD_PRELOAD" nil)
+    ad-do-it))
+
 (defun ssh (host)
   "Open a terminal containing an ssh session to the HOST."
   (interactive "sHost: ")
@@ -3848,6 +3974,10 @@ This allows you to pass a list of arguments through `ansi-term'."
                           magit-revision-mode-refresh-popup))
            (magit-define-popup-switch popup ?R "Reverse diff" "-R"))))
 
+(defadvice magit-wip-commit-buffer-file
+    (around mdw-just-this-buffer activate compile)
+  (let ((magit-save-repository-buffers nil)) ad-do-it))
+
 (setq magit-repolist-columns
       '(("Name" 16 magit-repolist-column-ident nil)
        ("Version" 18 magit-repolist-column-version nil)
@@ -3881,6 +4011,13 @@ there is sadness."
           (propertize (number-to-string n) 'face
                       (if (> n 0) 'bold 'shadow))))))
 
+(defun mdw-try-smerge ()
+  (save-excursion
+    (goto-char (point-min))
+    (when (re-search-forward "^<<<<<<< " nil t)
+      (smerge-mode 1))))
+(add-hook 'find-file-hook 'mdw-try-smerge t)
+
 ;;;--------------------------------------------------------------------------
 ;;; MPC configuration.