(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)
(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)))
+
+(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
+ '(("\\.\\(?:c\\|C\\|cc\\|cpp\\|cxx\\|c\\+\\+\\)\\'"
+ mdw-flymake-make-init)
+ ("\\.\\(?:h\\|H\\|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"
(mdw-define-face region
(((min-colors 64)) :background "grey30")
(((class color)) :background "blue")
- ((t) :inverse-video t))
+ (t :inverse-video t))
(mdw-define-face match
(((class color)) :background "blue")
(t :inverse-video t))