bin/mdw-pager: Don't be a pager if called by Emacs M-x grep.
[profile] / el / dot-emacs.el
index f8141dc..8bb88c3 100644 (file)
@@ -321,6 +321,43 @@ Evil key bindings are defined in `mdw-evil-keymap-keys'."
       org-export-docbook-xslt-stylesheet
       "/usr/share/xml/docbook/stylesheet/docbook-xsl/fo/docbook.xsl")
 
       org-export-docbook-xslt-stylesheet
       "/usr/share/xml/docbook/stylesheet/docbook-xsl/fo/docbook.xsl")
 
+;; Some hacks to do with window placement.
+
+(defun mdw-clobber-other-windows-showing-buffer (buffer-or-name)
+  "Arrange that no windows on other frames are showing BUFFER-OR-NAME."
+  (interactive "bBuffer: ")
+  (let ((home-frame (selected-frame))
+       (buffer (get-buffer buffer-or-name))
+       (safe-buffer (get-buffer "*scratch*")))
+    (mapc (lambda (frame)
+           (or (eq frame home-frame)
+               (mapc (lambda (window)
+                       (and (eq (window-buffer window) buffer)
+                            (set-window-buffer window safe-buffer)))
+                     (window-list frame))))
+         (frame-list))))
+
+(defvar mdw-inhibit-walk-windows nil
+  "If non-nil, then `walk-windows' does nothing.
+This is used by advice on `switch-to-buffer-other-frame' to inhibit finding
+buffers in random frames.")
+
+(defadvice walk-windows (around mdw-inhibit activate)
+  "If `mdw-inhibit-walk-windows' is non-nil, then do nothing."
+  (and (not mdw-inhibit-walk-windows)
+       ad-do-it))
+
+(defadvice switch-to-buffer-other-frame
+    (around mdw-always-new-frame activate)
+  "Always make a new frame.
+Even if an existing window in some random frame looks tempting."
+  (let ((mdw-inhibit-walk-windows t)) ad-do-it))
+
+(defadvice display-buffer (before mdw-inhibit-other-frames activate)
+  "Don't try to do anything fancy with other frames.
+Pretend they don't exist.  They might be on other display devices."
+  (ad-set-arg 2 nil))
+
 ;;;--------------------------------------------------------------------------
 ;;; Mail and news hacking.
 
 ;;;--------------------------------------------------------------------------
 ;;; Mail and news hacking.
 
@@ -573,10 +610,10 @@ If NEW-SESSION-P, start a new session."
        (select-window window)))))
 
 (defvar mdw-good-url-browsers
        (select-window window)))))
 
 (defvar mdw-good-url-browsers
-  '(browse-url-generic
+  '(browse-url-mozilla
+    browse-url-generic
     (w3m . mdw-w3m-browse-url)
     (w3m . mdw-w3m-browse-url)
-    browse-url-w3
-    browse-url-mozilla)
+    browse-url-w3)
   "List of good browsers for mdw-good-url-browsers.
 Each item is a browser function name, or a cons (CHECK . FUNC).
 A symbol FOO stands for (FOO . FOO).")
   "List of good browsers for mdw-good-url-browsers.
 Each item is a browser function name, or a cons (CHECK . FUNC).
 A symbol FOO stands for (FOO . FOO).")
@@ -865,6 +902,13 @@ doesn't match any of the regular expressions in
   (((type tty) (class color)) :background "blue")
   (((type tty) (class mono)) :inverse-video t)
   (t :background "grey30"))
   (((type tty) (class color)) :background "blue")
   (((type tty) (class mono)) :inverse-video t)
   (t :background "grey30"))
+(mdw-define-face match
+  (((type tty) (class color)) :background "blue")
+  (((type tty) (class mono)) :inverse-video t)
+  (t :background "blue"))
+(mdw-define-face mc/cursor-face
+  (((type tty) (class mono)) :inverse-video t)
+  (t :background "red"))
 (mdw-define-face minibuffer-prompt
   (t :weight bold))
 (mdw-define-face mode-line
 (mdw-define-face minibuffer-prompt
   (t :weight bold))
 (mdw-define-face mode-line
@@ -1197,7 +1241,6 @@ doesn't match any of the regular expressions in
                      "explicit"        ;C++
                      "export"          ;C++
                      "extern"          ;K&R, C89
                      "explicit"        ;C++
                      "export"          ;C++
                      "extern"          ;K&R, C89
-                     "false"           ;C++, C9X macro
                      "float"           ;K&R, C89
                      "for"             ;K&R, C89
                      ;; "fortran"      ;K&R
                      "float"           ;K&R, C89
                      "for"             ;K&R, C89
                      ;; "fortran"      ;K&R
@@ -1229,9 +1272,7 @@ doesn't match any of the regular expressions in
                      "struct"           ;K&R, C89
                      "switch"           ;K&R, C89
                      "template"         ;C++
                      "struct"           ;K&R, C89
                      "switch"           ;K&R, C89
                      "template"         ;C++
-                     "this"             ;C++
                      "throw"            ;C++
                      "throw"            ;C++
-                     "true"             ;C++, C9X macro
                      "try"              ;C++
                      "this"             ;C++
                      "typedef"          ;C89
                      "try"              ;C++
                      "this"             ;C++
                      "typedef"          ;C89
@@ -1266,6 +1307,11 @@ doesn't match any of the regular expressions in
                      "__typeof__"       ;GCC
                      "__volatile__"     ;GCC
                      ))
                      "__typeof__"       ;GCC
                      "__volatile__"     ;GCC
                      ))
+       (c-constants
+        (mdw-regexps "false"           ;C++, C9X macro
+                     "this"             ;C++
+                     "true"             ;C++, C9X macro
+                     ))
        (preprocessor-keywords
         (mdw-regexps "assert" "define" "elif" "else" "endif" "error"
                      "ident" "if" "ifdef" "ifndef" "import" "include"
        (preprocessor-keywords
         (mdw-regexps "assert" "define" "elif" "else" "endif" "error"
                      "ident" "if" "ifdef" "ifndef" "import" "include"
@@ -1297,6 +1343,9 @@ doesn't match any of the regular expressions in
           (list (concat "\\<\\(" c-keywords "\\)\\>")
                 '(0 font-lock-keyword-face))
 
           (list (concat "\\<\\(" c-keywords "\\)\\>")
                 '(0 font-lock-keyword-face))
 
+          (list (concat "\\<\\(" c-constants "\\)\\>")
+                '(0 font-lock-variable-name-face))
+
           ;; Handle numbers too.
           ;;
           ;; This looks strange, I know.  It corresponds to the
           ;; Handle numbers too.
           ;;
           ;; This looks strange, I know.  It corresponds to the
@@ -1401,11 +1450,11 @@ doesn't match any of the regular expressions in
                      "for" "goto" "if" "implements" "import" "instanceof"
                      "int" "interface" "long" "native" "new" "package"
                      "private" "protected" "public" "return" "short"
                      "for" "goto" "if" "implements" "import" "instanceof"
                      "int" "interface" "long" "native" "new" "package"
                      "private" "protected" "public" "return" "short"
-                     "static" "super" "switch" "synchronized" "this"
-                     "throw" "throws" "transient" "try" "void" "volatile"
-                     "while"
+                     "static" "switch" "synchronized" "throw" "throws"
+                     "transient" "try" "void" "volatile" "while"))
 
 
-                     "false" "null" "true")))
+       (java-constants
+        (mdw-regexps "false" "null" "super" "this" "true")))
 
     (setq font-lock-keywords
          (list
 
     (setq font-lock-keywords
          (list
@@ -1414,6 +1463,10 @@ doesn't match any of the regular expressions in
           (list (concat "\\<\\(" java-keywords "\\)\\>")
                 '(0 font-lock-keyword-face))
 
           (list (concat "\\<\\(" java-keywords "\\)\\>")
                 '(0 font-lock-keyword-face))
 
+          ;; Handle the magic constants defined above.
+          (list (concat "\\<\\(" java-constants "\\)\\>")
+                '(0 font-lock-variable-name-face))
+
           ;; Handle numbers too.
           ;;
           ;; The following isn't quite right, but it's close enough.
           ;; Handle numbers too.
           ;;
           ;; The following isn't quite right, but it's close enough.
@@ -1495,18 +1548,21 @@ doesn't match any of the regular expressions in
 
 (defun mdw-fontify-scala ()
 
 
 (defun mdw-fontify-scala ()
 
+  ;; Comment filling.
+  (setq mdw-fill-prefix mdw-c-comment-fill-prefix)
+
   ;; Define things to be fontified.
   (make-local-variable 'font-lock-keywords)
   (let ((scala-keywords
         (mdw-regexps "abstract" "case" "catch" "class" "def" "do" "else"
                      "extends" "final" "finally" "for" "forSome" "if"
                      "implicit" "import" "lazy" "match" "new" "object"
   ;; Define things to be fontified.
   (make-local-variable 'font-lock-keywords)
   (let ((scala-keywords
         (mdw-regexps "abstract" "case" "catch" "class" "def" "do" "else"
                      "extends" "final" "finally" "for" "forSome" "if"
                      "implicit" "import" "lazy" "match" "new" "object"
-                     "override" "package" "protected" "return" "sealed"
-                     "super" "this" "throw" "trait" "try" "type" "val"
+                     "override" "package" "private" "protected" "return"
+                     "sealed" "throw" "trait" "try" "type" "val"
                      "var" "while" "with" "yield"))
        (scala-constants
                      "var" "while" "with" "yield"))
        (scala-constants
-        (mdw-regexps "false" "null" "true"))
-       (punctuation "\\s.\\|\\s(\\|\\s)\\|\\s\\\\|\\s/"))
+        (mdw-regexps "false" "null" "super" "this" "true"))
+       (punctuation "[-!%^&*=+:@#~/?\\|`]"))
 
     (setq font-lock-keywords
          (list
 
     (setq font-lock-keywords
          (list
@@ -1591,22 +1647,22 @@ doesn't match any of the regular expressions in
   ;; Now define things to be fontified.
   (make-local-variable 'font-lock-keywords)
   (let ((csharp-keywords
   ;; Now define things to be fontified.
   (make-local-variable 'font-lock-keywords)
   (let ((csharp-keywords
-        (mdw-regexps "abstract" "as" "base" "bool" "break"
-                     "byte" "case" "catch" "char" "checked"
-                     "class" "const" "continue" "decimal" "default"
-                     "delegate" "do" "double" "else" "enum"
-                     "event" "explicit" "extern" "false" "finally"
-                     "fixed" "float" "for" "foreach" "goto"
-                     "if" "implicit" "in" "int" "interface"
-                     "internal" "is" "lock" "long" "namespace"
-                     "new" "null" "object" "operator" "out"
-                     "override" "params" "private" "protected" "public"
-                     "readonly" "ref" "return" "sbyte" "sealed"
-                     "short" "sizeof" "stackalloc" "static" "string"
-                     "struct" "switch" "this" "throw" "true"
-                     "try" "typeof" "uint" "ulong" "unchecked"
-                     "unsafe" "ushort" "using" "virtual" "void"
-                     "volatile" "while" "yield")))
+        (mdw-regexps "abstract" "as" "bool" "break" "byte" "case" "catch"
+                     "char" "checked" "class" "const" "continue" "decimal"
+                     "default" "delegate" "do" "double" "else" "enum"
+                     "event" "explicit" "extern" "finally" "fixed" "float"
+                     "for" "foreach" "goto" "if" "implicit" "in" "int"
+                     "interface" "internal" "is" "lock" "long" "namespace"
+                     "new" "object" "operator" "out" "override" "params"
+                     "private" "protected" "public" "readonly" "ref"
+                     "return" "sbyte" "sealed" "short" "sizeof"
+                     "stackalloc" "static" "string" "struct" "switch"
+                     "throw" "try" "typeof" "uint" "ulong" "unchecked"
+                     "unsafe" "ushort" "using" "virtual" "void" "volatile"
+                     "while" "yield"))
+
+       (csharp-constants
+        (mdw-regexps "base" "false" "null" "this" "true")))
 
     (setq font-lock-keywords
          (list
 
     (setq font-lock-keywords
          (list
@@ -1615,6 +1671,10 @@ doesn't match any of the regular expressions in
           (list (concat "\\<\\(" csharp-keywords "\\)\\>")
                 '(0 font-lock-keyword-face))
 
           (list (concat "\\<\\(" csharp-keywords "\\)\\>")
                 '(0 font-lock-keyword-face))
 
+          ;; Handle the magic constants defined above.
+          (list (concat "\\<\\(" csharp-constants "\\)\\>")
+                '(0 font-lock-variable-name-face))
+
           ;; Handle numbers too.
           ;;
           ;; The following isn't quite right, but it's close enough.
           ;; Handle numbers too.
           ;;
           ;; The following isn't quite right, but it's close enough.
@@ -1654,12 +1714,12 @@ doesn't match any of the regular expressions in
 
   (let ((fsharp-keywords
         (mdw-regexps "abstract" "and" "as" "assert" "atomic"
 
   (let ((fsharp-keywords
         (mdw-regexps "abstract" "and" "as" "assert" "atomic"
-                     "base" "begin" "break"
+                     "begin" "break"
                      "checked" "class" "component" "const" "constraint"
                      "constructor" "continue"
                      "default" "delegate" "do" "done" "downcast" "downto"
                      "eager" "elif" "else" "end" "exception" "extern"
                      "checked" "class" "component" "const" "constraint"
                      "constructor" "continue"
                      "default" "delegate" "do" "done" "downcast" "downto"
                      "eager" "elif" "else" "end" "exception" "extern"
-                     "false" "finally" "fixed" "for" "fori" "fun" "function"
+                     "finally" "fixed" "for" "fori" "fun" "function"
                      "functor"
                      "global"
                      "if" "in" "include" "inherit" "inline" "interface"
                      "functor"
                      "global"
                      "if" "in" "include" "inherit" "inline" "interface"
@@ -1667,20 +1727,21 @@ doesn't match any of the regular expressions in
                      "lazy" "let"
                      "match" "measure" "member" "method" "mixin" "module"
                      "mutable"
                      "lazy" "let"
                      "match" "measure" "member" "method" "mixin" "module"
                      "mutable"
-                     "namespace" "new" "null"
-                     "object""of" "open" "or" "override"
+                     "namespace" "new"
+                     "object" "of" "open" "or" "override"
                      "parallel" "params" "private" "process" "protected"
                      "public" "pure"
                      "rec" "recursive" "return"
                      "sealed" "sig" "static" "struct"
                      "parallel" "params" "private" "process" "protected"
                      "public" "pure"
                      "rec" "recursive" "return"
                      "sealed" "sig" "static" "struct"
-                     "tailcall" "then" "to" "trait" "true" "try" "type"
+                     "tailcall" "then" "to" "trait" "try" "type"
                      "upcast" "use"
                      "val" "virtual" "void" "volatile"
                      "when" "while" "with"
                      "yield"))
 
        (fsharp-builtins
                      "upcast" "use"
                      "val" "virtual" "void" "volatile"
                      "when" "while" "with"
                      "yield"))
 
        (fsharp-builtins
-        (mdw-regexps "asr" "land" "lor" "lsl" "lsr" "lxor" "mod"))
+        (mdw-regexps "asr" "land" "lor" "lsl" "lsr" "lxor" "mod"
+                     "base" "false" "null" "true"))
 
        (bang-keywords
         (mdw-regexps "do" "let" "return" "use" "yield"))
 
        (bang-keywords
         (mdw-regexps "do" "let" "return" "use" "yield"))
@@ -1883,7 +1944,6 @@ doesn't match any of the regular expressions in
 
 ;; Perl indentation style.
 
 
 ;; Perl indentation style.
 
-(fset 'perl-mode 'cperl-mode)
 (setq cperl-indent-level 2)
 (setq cperl-continued-statement-offset 2)
 (setq cperl-continued-brace-offset 0)
 (setq cperl-indent-level 2)
 (setq cperl-continued-statement-offset 2)
 (setq cperl-continued-brace-offset 0)