emacs: Turn off annoying `help' message in file chooser.
[profile] / dot-emacs.el
index 9c9a2cb..0d27f52 100644 (file)
@@ -188,6 +188,43 @@ symbols `sunday', `monday', etc. (or a mixture).  If the date stored in
                                (nth 2 when))))))))
     (eq w d)))
 
+;; --- Fighting with Org-mode's evil key maps ---
+
+(defvar mdw-evil-keymap-keys
+  '(([S-up] . [?\C-c up])
+    ([S-down] . [?\C-c down])
+    ([S-left] . [?\C-c left])
+    ([S-right] . [?\C-c right])
+    (([M-up] [?\e up]) . [C-up])
+    (([M-down] [?\e down]) . [C-down])
+    (([M-left] [?\e left]) . [C-left])
+    (([M-right] [?\e right]) . [C-right]))
+  "Defines evil keybindings to clobber in `mdw-clobber-evil-keymap'.
+The value is an alist mapping evil keys (as a list, or singleton)
+to good keys (in the same form).")
+
+(defun mdw-clobber-evil-keymap (keymap)
+  "Replace evil key bindings in the KEYMAP.
+Evil key bindings are defined in `mdw-evil-keymap-keys'."
+  (dolist (entry mdw-evil-keymap-keys)
+    (let ((binding nil)
+         (keys (if (listp (car entry))
+                   (car entry)
+                 (list (car entry))))
+         (replacements (if (listp (cdr entry))
+                           (cdr entry)
+                         (list (cdr entry)))))
+      (catch 'found
+       (dolist (key keys)
+         (setq binding (lookup-key keymap key))
+         (when binding
+           (throw 'found nil))))
+      (when binding
+       (dolist (key keys)
+         (define-key keymap key nil))
+       (dolist (key replacements)
+         (define-key keymap key binding))))))
+
 ;;;----- Mail and news hacking ----------------------------------------------
 
 (define-derived-mode  mdwmail-mode mail-mode "[mdw] mail"
@@ -395,6 +432,7 @@ get itself into a twist."
   (mdw-check-autorevert))
 (defadvice write-file (after mdw-autorevert activate)
   (mdw-check-autorevert))
+
 ;;;----- Dired hacking ------------------------------------------------------
 
 (defadvice dired-maybe-insert-subdir
@@ -727,6 +765,16 @@ the regular expressions in `mdw-backup-disable-regexps'."
        :foreground ,(if window-system "SeaGreen1" "green"))
     (woman-bold :weight bold)
     (woman-italic :slant italic)
+    (p4-depot-added-face :foreground "green")
+    (p4-depot-branch-op-face :foreground "yellow")
+    (p4-depot-deleted-face :foreground "red")
+    (p4-depot-unmapped-face
+       :foreground ,(if window-system "SkyBlue1" "cyan"))
+    (p4-diff-change-face :foreground "yellow")
+    (p4-diff-del-face :foreground "red")
+    (p4-diff-file-face :foreground "SkyBlue1")
+    (p4-diff-head-face :background "grey10")
+    (p4-diff-ins-face :foreground "green")
     (diff-index :weight bold)
     (diff-file-header :weight bold)
     (diff-hunk-header :foreground "SkyBlue1")
@@ -768,19 +816,42 @@ the regular expressions in `mdw-backup-disable-regexps'."
      (define-key c-mode-map "*" nil)
      (define-key c-mode-map "/" nil)))
 
+(defun mdw-c-lineup-arglist (langelem)
+  "Hack for DWIMmery in c-lineup-arglist."
+  (if (save-excursion
+       (c-block-in-arglist-dwim (c-langelem-2nd-pos c-syntactic-element)))
+      0
+    (c-lineup-arglist langelem)))
+
+(defun mdw-c-indent-extern-mumble (langelem)
+  "Indent `extern \"...\" {' lines."
+  (save-excursion
+    (back-to-indentation)
+    (if (looking-at
+        "\\s-*\\<extern\\>\\s-*\"\\([^\\\\\"]+\\|\\.\\)*\"\\s-*{")
+       c-basic-offset
+      nil)))
+
 (defun mdw-c-style ()
   (c-add-style "[mdw] C and C++ style"
               '((c-basic-offset . 2)
                 (comment-column . 40)
                 (c-class-key . "class")
-                (c-offsets-alist (substatement-open . 0)
-                                 (label . 0)
-                                 (case-label . +)
-                                 (access-label . -)
-                                 (inclass . +)
-                                 (inline-open . ++)
-                                 (statement-cont . 0)
-                                 (statement-case-intro . +)))
+                (c-backslash-column . 72)
+                (c-offsets-alist
+                 (substatement-open . (add 0 c-indent-one-line-block))
+                 (defun-open . (add 0 c-indent-one-line-block))
+                 (arglist-cont-nonempty . mdw-c-lineup-arglist)
+                 (topmost-intro . mdw-c-indent-extern-mumble)
+                 (cpp-define-intro . 0)
+                 (inextern-lang . [0])
+                 (label . 0)
+                 (case-label . +)
+                 (access-label . -)
+                 (inclass . +)
+                 (inline-open . ++)
+                 (statement-cont . 0)
+                 (statement-case-intro . +)))
               t))
 
 (defun mdw-fontify-c-and-c++ ()
@@ -2034,6 +2105,10 @@ strip numbers instead."
 
 ;; --- Lispy languages ---
 
+;; Unpleasant bodge.
+(unless (boundp 'slime-repl-mode-map)
+  (setq slime-repl-mode-map (make-sparse-keymap)))
+
 (defun mdw-indent-newline-and-indent ()
   (interactive)
   (indent-for-tab-command)
@@ -2052,6 +2127,10 @@ strip numbers instead."
   (make-variable-buffer-local 'lisp-indent-function)
   (setq lisp-indent-function 'common-lisp-indent-function))
 
+(setq lisp-simple-loop-indentation 2
+      lisp-loop-keyword-indentation 6
+      lisp-loop-forms-indentation 6)
+
 (defun mdw-fontify-lispy ()
 
   ;; --- Set fill prefix ---
@@ -2103,14 +2182,30 @@ strip numbers instead."
            'comint-watch-for-password-prompt))
 
 (defun mdw-term-mode-setup ()
-  (setq term-prompt-regexp "^[^]#$%>»}\n]*[]#$%>»}] *")
+  (setq term-prompt-regexp shell-prompt-pattern)
   (make-local-variable 'mouse-yank-at-point)
   (make-local-variable 'transient-mark-mode)
   (setq mouse-yank-at-point t)
-  (setq transient-mark-mode nil)
   (auto-fill-mode -1)
   (setq tab-width 8))
 
+(defun term-send-meta-right () (interactive) (term-send-raw-string "\e\e[C"))
+(defun term-send-meta-left  () (interactive) (term-send-raw-string "\e\e[D"))
+(defun term-send-ctrl-uscore () (interactive) (term-send-raw-string "\C-_"))
+(defun term-send-meta-meta-something ()
+  (interactive)
+  (term-send-raw-string "\e\e")
+  (term-send-raw))
+(eval-after-load 'term
+  '(progn
+     (define-key term-raw-map [?\e ?\e] nil)
+     (define-key term-raw-map [?\e ?\e t] 'term-send-meta-meta-something)
+     (define-key term-raw-map [?\C-/] 'term-send-ctrl-uscore)
+     (define-key term-raw-map [M-right] 'term-send-meta-right)
+     (define-key term-raw-map [?\e ?\M-O ?C] 'term-send-meta-right)
+     (define-key term-raw-map [M-left] 'term-send-meta-left)
+     (define-key term-raw-map [?\e ?\M-O ?D] 'term-send-meta-left)))
+
 ;;;----- That's all, folks --------------------------------------------------
 
 (provide 'dot-emacs)