(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"
: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")
(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++ ()
(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 ---
;; --- 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)
(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)
'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)