backgrounds: Add two more for the collection.
[profile] / dot-emacs.el
index b8d5381..f687acb 100644 (file)
@@ -765,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")
@@ -806,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++ ()
@@ -1381,6 +1414,67 @@ strip numbers instead."
           (list "\\(\\s.\\|\\s(\\|\\s)\\|\\s\\\\|\\s/\\)"
                 '(0 mdw-punct-face))))))
 
+;;;----- Icon programming style ---------------------------------------------
+
+;; --- Icon indentation style ---
+
+(setq icon-brace-offset 0
+      icon-continued-brace-offset 0
+      icon-continued-statement-offset 2
+      icon-indent-level 2)
+
+;; --- Define Icon fontification style ---
+
+(defun mdw-fontify-icon ()
+
+  ;; --- Miscellaneous fiddling ---
+
+  (mdw-standard-fill-prefix "\\([ \t]*#+[ \t]*\\)")
+
+  ;; --- Now define fontification things ---
+
+  (make-local-variable 'font-lock-keywords)
+  (let ((icon-keywords
+        (mdw-regexps "break" "by" "case" "create" "default" "do" "else"
+                     "end" "every" "fail" "global" "if" "initial"
+                     "invocable" "link" "local" "next" "not" "of"
+                     "procedure" "record" "repeat" "return" "static"
+                     "suspend" "then" "to" "until" "while"))
+       (preprocessor-keywords
+        (mdw-regexps "define" "else" "endif" "error" "ifdef" "ifndef"
+                     "include" "line" "undef")))
+    (setq font-lock-keywords
+         (list
+
+          ;; --- Set up the keywords defined above ---
+
+          (list (concat "\\<\\(" icon-keywords "\\)\\>")
+                '(0 font-lock-keyword-face))
+
+          ;; --- The things that Icon calls keywords ---
+
+          (list "&\\sw+\\>" '(0 font-lock-variable-name-face))
+
+          ;; --- At least numbers are simpler than C ---
+
+          (list (concat "\\<[0-9]+"
+                        "\\([rR][0-9a-zA-Z]+\\|"
+                        "\\.[0-9]+\\([eE][+-]?[0-9]+\\)?\\)\\>\\|"
+                        "\\.[0-9]+\\([eE][+-]?[0-9]+\\)?\\>")
+                '(0 mdw-number-face))
+
+          ;; --- Preprocessor ---
+
+          (list (concat "^[ \t]*$[ \t]*\\<\\("
+                        preprocessor-keywords
+                        "\\)\\>")
+                '(0 font-lock-keyword-face))
+
+          ;; --- And anything else is punctuation ---
+
+          (list "\\(\\s.\\|\\s(\\|\\s)\\|\\s\\\\|\\s/\\)"
+                '(0 mdw-punct-face))))))
+
 ;;;----- ARM assembler programming configuration ----------------------------
 
 ;; --- There doesn't appear to be an Emacs mode for this yet ---
@@ -2072,6 +2166,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)
@@ -2090,7 +2188,7 @@ strip numbers instead."
   (make-variable-buffer-local 'lisp-indent-function)
   (setq lisp-indent-function 'common-lisp-indent-function))
 
-(setq lisp-simple-loop-indentation 1
+(setq lisp-simple-loop-indentation 2
       lisp-loop-keyword-indentation 6
       lisp-loop-forms-indentation 6)
 
@@ -2145,14 +2243,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)