(car alists)
(cdr alists)))))
-
(defun mdw-do-uniquify (done end l rest)
"A helper function for mdw-uniquify-alist.
The DONE argument is a list whose first element is `nil'. It
(setq answer func)))
answer))
+(eval-after-load "w3m-search"
+ '(progn
+ (dolist
+ (item
+ '(("g" "Google" "http://www.google.co.uk/search?q=%s")
+ ("gd" "Google Directory"
+ "http://www.google.com/search?cat=gwd/Top&q=%s")
+ ("gg" "Google Groups" "http://groups.google.com/groups?q=%s")
+ ("ward" "Ward's wiki" "http://c2.com/cgi/wiki?%s")
+ ("gi" "Images" "http://images.google.com/images?q=%s")
+ ("rfc" "RFC"
+ "http://metalzone.distorted.org.uk/ftp/pub/mirrors/rfc/rfc%s.txt.gz")
+ ("wp" "Wikipedia"
+ "http://en.wikipedia.org/wiki/Special:Search?go=Go&search=%s")
+ ("imdb" "IMDb" "http://www.imdb.com/Find?%s")
+ ("nc-wiki" "nCipher wiki"
+ "http://wiki.ncipher.com/wiki/bin/view/Devel/?topic=%s")
+ ("map" "Google maps" "http://maps.google.co.uk/maps?q=%s&hl=en")
+ ("lp" "Launchpad bug by number"
+ "https://bugs.launchpad.net/bugs/%s")
+ ("lppkg" "Launchpad bugs by package"
+ "https://bugs.launchpad.net/%s")
+ ("msdn" "MSDN"
+ "http://social.msdn.microsoft.com/Search/en-GB/?query=%s&ac=8")
+ ("debbug" "Debian bug by number"
+ "http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=%s")
+ ("debbugpkg" "Debian bugs by package"
+ "http://bugs.debian.org/cgi-bin/pkgreport.cgi?pkg=%s")
+ ("ljlogin" "LJ login" "http://www.livejournal.com/login.bml")))
+ (add-to-list 'w3m-search-engine-alist
+ (list (cadr item) (caddr item) nil))
+ (add-to-list 'w3m-uri-replace-alist
+ (list (concat "\\`" (car item) ":")
+ 'w3m-search-uri-replace
+ (cadr item))))))
+
;;;--------------------------------------------------------------------------
;;; Paragraph filling.
(auto-fill-mode 1)
(setq fill-column 77)
(setq show-trailing-whitespace t)
+ (let ((whitespace-style (remove 'trailing whitespace-style)))
+ (trap (whitespace-mode t)))
(and (fboundp 'gtags-mode)
(gtags-mode))
(outline-minor-mode t)
(reveal-mode t)
(trap (turn-on-font-lock)))
+(defun mdw-post-config-mode-hack ()
+ (let ((whitespace-style (remove 'trailing whitespace-style)))
+ (trap (whitespace-mode t))))
+
(eval-after-load 'gtags
'(progn
(dolist (key '([mouse-2] [mouse-3]))
answer))))
(setq backup-enable-predicate 'mdw-backup-enable-predicate)
+;; Frame cleanup.
+
+(defun mdw-last-one-out-turn-off-the-lights (frame)
+ "Disconnect from an X display if this was the last frame on that display."
+ (let ((frame-display (frame-parameter frame 'display)))
+ (when (and frame-display
+ (eq window-system 'x)
+ (not (some (lambda (fr)
+ (message "checking frame %s" frame)
+ (and (not (eq fr frame))
+ (string= (frame-parameter fr 'display)
+ frame-display)
+ (progn "frame %s still uses us" nil)))
+ (frame-list))))
+ (run-with-idle-timer 0 nil #'x-close-connection frame-display))))
+(add-hook 'delete-frame-functions 'mdw-last-one-out-turn-off-the-lights)
+
;;;--------------------------------------------------------------------------
;;; General fontification.
(mdw-define-face default
(((type w32)) :family "courier new" :height 85)
(((type x)) :family "6x13" :height 130)
- (t :foreground "white" :background "black"))
+ (((type color)) :foreground "white" :background "black")
+ (t nil))
(mdw-define-face fixed-pitch
(((type w32)) :family "courier new" :height 85)
(((type x)) :family "6x13" :height 130)
(mdw-define-face variable-pitch
(((type x)) :family "helvetica" :height 120)))
(mdw-define-face region
- (((type tty)) :background "blue") (t :background "grey30"))
+ (((type tty) (class color)) :background "blue")
+ (((type tty) (class mono)) :inverse-video t)
+ (t :background "grey30"))
(mdw-define-face minibuffer-prompt
(t :weight bold))
(mdw-define-face mode-line
- (t :foreground "blue" :background "yellow"
- :box (:line-width 1 :style released-button)))
+ (((class color)) :foreground "blue" :background "yellow"
+ :box (:line-width 1 :style released-button))
+ (t :inverse-video t))
(mdw-define-face mode-line-inactive
- (t :foreground "yellow" :background "blue"
- :box (:line-width 1 :style released-button)))
+ (((class color)) :foreground "yellow" :background "blue"
+ :box (:line-width 1 :style released-button))
+ (t :inverse-video t))
(mdw-define-face scroll-bar
(t :foreground "black" :background "lightgrey"))
(mdw-define-face fringe
(t :foreground "yellow"))
(mdw-define-face show-paren-match
- (t :background "darkgreen"))
+ (((class color)) :background "darkgreen")
+ (t :underline t))
(mdw-define-face show-paren-mismatch
- (t :background "red"))
+ (((class color)) :background "red")
+ (t :inverse-video t))
(mdw-define-face highlight
- (t :background "DarkSeaGreen4"))
+ (((class color)) :background "DarkSeaGreen4")
+ (t :inverse-video t))
(mdw-define-face holiday-face
(t :background "red"))
(mdw-define-face comint-highlight-prompt
(t :weight bold))
-(mdw-define-face comint-highlight-input
- (t :slant italic))
+(mdw-define-face comint-highlight-input)
(mdw-define-face trailing-whitespace
- (t :background "red"))
+ (((class color)) :background "red")
+ (t :inverse-video t))
(mdw-define-face mdw-punct-face
(((type tty)) :foreground "yellow") (t :foreground "burlywood2"))
(mdw-define-face mdw-number-face
(t :slant italic))
(mdw-define-face font-lock-builtin-face
(t :weight bold))
+(mdw-define-face font-lock-type-face
+ (t :weight bold :slant italic))
(mdw-define-face font-lock-reference-face
(t :weight bold))
(mdw-define-face font-lock-variable-name-face
(t :slant italic))
(mdw-define-face font-lock-comment-delimiter-face
- (default :slant italic)
- (((type tty)) :foreground "green") (t :foreground "SeaGreen1"))
+ (((class mono)) :weight bold)
+ (((type tty) (class color)) :foreground "green")
+ (t :slant italic :foreground "SeaGreen1"))
(mdw-define-face font-lock-comment-face
- (default :slant italic)
- (((type tty)) :foreground "green") (t :foreground "SeaGreen1"))
+ (((class mono)) :weight bold)
+ (((type tty) (class color)) :foreground "green")
+ (t :slant italic :foreground "SeaGreen1"))
(mdw-define-face font-lock-string-face
- (t :foreground "SkyBlue1"))
-
+ (((class mono)) :weight bold)
+ (((class color)) :foreground "SkyBlue1"))
(mdw-define-face message-separator
(t :background "red" :foreground "white" :weight bold))
(mdw-define-face message-cited-text
;; And anything else is punctuation.
(list "\\(\\s.\\|\\s(\\|\\s)\\|\\s\\\\|\\s/\\)"
- '(0 mdw-punct-face))))))
+ '(0 mdw-punct-face))))
+
+ (mdw-post-config-mode-hack)))
;;;--------------------------------------------------------------------------
;;; AP calc mode.
;; And anything else is punctuation.
(list "\\(\\s.\\|\\s(\\|\\s)\\|\\s\\\\|\\s/\\)"
- '(0 mdw-punct-face))))))
+ '(0 mdw-punct-face)))))
+
+ (mdw-post-config-mode-hack))
;;;--------------------------------------------------------------------------
;;; Java programming configuration.
;; And anything else is punctuation.
(list "\\(\\s.\\|\\s(\\|\\s)\\|\\s\\\\|\\s/\\)"
- '(0 mdw-punct-face))))))
+ '(0 mdw-punct-face)))))
+
+ (mdw-post-config-mode-hack))
;;;--------------------------------------------------------------------------
;;; C# programming configuration.
;; And anything else is punctuation.
(list "\\(\\s.\\|\\s(\\|\\s)\\|\\s\\\\|\\s/\\)"
- '(0 mdw-punct-face))))))
+ '(0 mdw-punct-face)))))
+
+ (mdw-post-config-mode-hack))
(define-derived-mode csharp-mode java-mode "C#"
"Major mode for editing C# code.")
;;;--------------------------------------------------------------------------
+;;; Go programming configuration.
+
+(defun mdw-fontify-go ()
+
+ (make-local-variable 'font-lock-keywords)
+ (let ((go-keywords
+ (mdw-regexps "break" "case" "chan" "const" "continue"
+ "default" "defer" "else" "fallthrough" "for"
+ "func" "go" "goto" "if" "import"
+ "interface" "map" "package" "range" "return"
+ "select" "struct" "switch" "type" "var")))
+
+ (setq font-lock-keywords
+ (list
+
+ ;; Handle the keywords defined above.
+ (list (concat "\\<\\(" go-keywords "\\)\\>")
+ '(0 font-lock-keyword-face))
+
+ ;; Handle numbers too.
+ ;;
+ ;; The following isn't quite right, but it's close enough.
+ (list (concat "\\<\\("
+ "0\\([xX][0-9a-fA-F]+\\|[0-7]+\\)\\|"
+ "[0-9]+\\(\\.[0-9]*\\|\\)"
+ "\\([eE]\\([-+]\\|\\)[0-9]+\\|\\)\\)")
+ '(0 mdw-number-face))
+
+ ;; And anything else is punctuation.
+ (list "\\(\\s.\\|\\s(\\|\\s)\\|\\s\\\\|\\s/\\)"
+ '(0 mdw-punct-face)))))
+
+ (mdw-post-config-mode-hack))
+
+;;;--------------------------------------------------------------------------
;;; Awk programming configuration.
;; Make Awk indentation nice.
;; And anything else is punctuation.
(list "\\(\\s.\\|\\s(\\|\\s)\\|\\s\\\\|\\s/\\)"
- '(0 mdw-punct-face))))))
+ '(0 mdw-punct-face)))))
+
+ (mdw-post-config-mode-hack))
;;;--------------------------------------------------------------------------
;;; Perl programming style.
;; And anything else is punctuation.
(list "\\(\\s.\\|\\s(\\|\\s)\\|\\s\\\\|\\s/\\)"
- '(0 mdw-punct-face))))))
+ '(0 mdw-punct-face)))))
+
+ (mdw-post-config-mode-hack))
(defun perl-number-tests (&optional arg)
"Assign consecutive numbers to lines containing `#t'. With ARG,
;; And anything else is punctuation.
(list "\\(\\s.\\|\\s(\\|\\s)\\|\\s\\\\|\\s/\\)"
- '(0 mdw-punct-face)))))
+ '(0 mdw-punct-face))))
+
+ (mdw-post-config-mode-hack))
;; Define Python fontification styles.
;; And anything else is punctuation.
(list "\\(\\s.\\|\\s(\\|\\s)\\|\\s\\\\|\\s/\\)"
- '(0 mdw-punct-face))))))
+ '(0 mdw-punct-face)))))
+
+ (mdw-post-config-mode-hack))
;;;--------------------------------------------------------------------------
;;; ARM assembler programming configuration.
;; And anything else is punctuation.
(list "\\(\\s.\\|\\s(\\|\\s)\\|\\s\\\\|\\s/\\)"
- '(0 mdw-punct-face))))
+ '(0 mdw-punct-face)))
+ (mdw-post-config-mode-hack))
(run-hooks 'arm-assembler-mode-hook))
;;;--------------------------------------------------------------------------
"\\([eE]\\([-+]\\|\\)[0-9_]+\\|\\)")
'(0 mdw-number-face))
(list "\\(\\s.\\|\\s(\\|\\s)\\|\\s\\\\|\\s/\\)"
- '(0 mdw-punct-face)))))
+ '(0 mdw-punct-face))))
+ (mdw-post-config-mode-hack))
;;;--------------------------------------------------------------------------
;;; REXX configuration.
;; And everything else is punctuation.
(list "\\(\\s.\\|\\s(\\|\\s)\\|\\s\\\\|\\s/\\)"
- '(0 mdw-punct-face))))))
+ '(0 mdw-punct-face)))))
+
+ (mdw-post-config-mode-hack))
;;;--------------------------------------------------------------------------
;;; Standard ML programming style.
;; And anything else is punctuation.
(list "\\(\\s.\\|\\s(\\|\\s)\\|\\s\\\\|\\s/\\)"
- '(0 mdw-punct-face))))))
+ '(0 mdw-punct-face)))))
+
+ (mdw-post-config-mode-hack))
;;;--------------------------------------------------------------------------
;;; Haskell configuration.
"\\([eE]\\([-+]\\|\\)[0-9]+\\|\\)")
'(0 mdw-number-face))
(list "\\(\\s.\\|\\s(\\|\\s)\\|\\s\\\\|\\s/\\)"
- '(0 mdw-punct-face))))))
+ '(0 mdw-punct-face)))))
+
+ (mdw-post-config-mode-hack))
;;;--------------------------------------------------------------------------
;;; Erlang configuration.
(list "\\<[0-9]+\\(\\|#[0-9a-zA-Z]+\\|[eE][+-]?[0-9]+\\)\\>"
'(0 mdw-number-face))
(list "\\(\\s.\\|\\s(\\|\\s)\\|\\s\\\\|\\s/\\)"
- '(0 mdw-punct-face))))))
+ '(0 mdw-punct-face)))))
+
+ (mdw-post-config-mode-hack))
;;;--------------------------------------------------------------------------
;;; Texinfo configuration.
;; Fontify TeX special characters as punctuation.
(list "[{}]+"
- '(0 mdw-punct-face)))))
+ '(0 mdw-punct-face))))
+
+ (mdw-post-config-mode-hack))
;;;--------------------------------------------------------------------------
;;; TeX and LaTeX configuration.
;; Fontify TeX special characters as punctuation.
(list "[$^_{}#&]"
- '(0 mdw-punct-face)))))
+ '(0 mdw-punct-face))))
+
+ (mdw-post-config-mode-hack))
;;;--------------------------------------------------------------------------
;;; SGML hacking.
(setq sh-basic-offset 2))
;;;--------------------------------------------------------------------------
+;;; Emacs shell mode.
+
+(defun mdw-eshell-prompt ()
+ (let ((left "[") (right "]"))
+ (when (= (user-uid) 0)
+ (setq left "«" right "»"))
+ (concat left
+ (save-match-data
+ (replace-regexp-in-string "\\..*$" "" (system-name)))
+ " "
+ (eshell/pwd)
+ right)))
+(setq eshell-prompt-function 'mdw-eshell-prompt)
+(setq eshell-prompt-regexp "^\\[[^]]+\\]")
+
+(mdw-define-face eshell-prompt (t :weight bold))
+(mdw-define-face eshell-ls-archive (t :weight bold :foreground "red"))
+(mdw-define-face eshell-ls-backup (t :foreground "lightgrey" :slant italic))
+(mdw-define-face eshell-ls-product (t :foreground "lightgrey" :slant italic))
+(mdw-define-face eshell-ls-clutter (t :foreground "lightgrey" :slant italic))
+(mdw-define-face eshell-ls-executable (t :weight bold))
+(mdw-define-face eshell-ls-directory (t :foreground "cyan" :weight bold))
+(mdw-define-face eshell-ls-readonly (t nil))
+(mdw-define-face eshell-ls-symlink (t :foreground "cyan"))
+
+;;;--------------------------------------------------------------------------
;;; Messages-file mode.
(defun messages-mode-guts ()
"\\([eE]\\([-+]\\|\\)[0-9_]+\\|\\)")
'(0 mdw-number-face))
(list "\\(\\s.\\|\\s(\\|\\s)\\|\\s\\\\|\\s/\\)"
- '(0 mdw-punct-face)))))
+ '(0 mdw-punct-face))))
+ (mdw-post-config-mode-hack))
;; Lispy languages.
(setq font-lock-keywords
(list
(list "\\(\\s.\\|\\s(\\|\\s)\\|\\s\\\\|\\s/\\)"
- '(0 mdw-punct-face)))))
+ '(0 mdw-punct-face))))
+
+ (mdw-post-config-mode-hack))
(defun comint-send-and-indent ()
(interactive)
(setq hs-hide-comments-when-hiding-all nil)
+(defadvice hs-hide-all (after hide-first-comment activate)
+ (save-excursion (hs-hide-initial-comment-block)))
+
;;;--------------------------------------------------------------------------
;;; Shell mode.
(define-key term-raw-map [M-left] 'term-send-meta-left)
(define-key term-raw-map [?\e ?\M-O ?D] 'term-send-meta-left)))
+;;;--------------------------------------------------------------------------
+;;; Inferior Emacs Lisp.
+
+(setq comint-prompt-read-only t)
+
+(eval-after-load "comint"
+ '(progn
+ (define-key comint-mode-map "\C-w" 'comint-kill-region)
+ (define-key comint-mode-map [C-S-backspace] 'comint-kill-whole-line)))
+
+(eval-after-load "ielm"
+ '(progn
+ (define-key ielm-map "\C-w" 'comint-kill-region)
+ (define-key ielm-map [C-S-backspace] 'comint-kill-whole-line)))
+
;;;----- That's all, folks --------------------------------------------------
(provide 'dot-emacs)