X-Git-Url: https://git.distorted.org.uk/~mdw/profile/blobdiff_plain/b7fc31ec024ef70d48888a80db951cd23a36e457..857045c69577e5eda802178eeb5cb20c3182b68c:/el/dot-emacs.el diff --git a/el/dot-emacs.el b/el/dot-emacs.el index bd7541a..db360e1 100644 --- a/el/dot-emacs.el +++ b/el/dot-emacs.el @@ -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 @@ -535,6 +548,12 @@ Pretend they don't exist. They might be on other display devices." '(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 @@ -567,6 +586,55 @@ to force interactive compilation." (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. @@ -1045,8 +1113,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)))) @@ -1481,6 +1548,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") @@ -3459,6 +3538,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. @@ -3722,6 +3804,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 @@ -3804,6 +3895,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: ") @@ -3851,6 +3954,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) @@ -3884,6 +3991,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.