Merge commit 'origin'
[profile] / el / dot-emacs.el
index 784aad1..404233b 100644 (file)
@@ -505,6 +505,42 @@ CHECK is fboundp, and returning the correponding FUNC."
          (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.
 
@@ -684,6 +720,24 @@ doesn't match any of the regular expressions in
           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 frame 'display)
+                                         frame-display)
+                                (progn "frame %s still uses us" nil)))
+                         (frame-list))))
+      (message "turn out the lights")
+      (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.
 
@@ -755,6 +809,8 @@ doesn't match any of the regular expressions in
   (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
@@ -1249,6 +1305,39 @@ doesn't match any of the regular expressions in
   "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))))))
+
+;;;--------------------------------------------------------------------------
 ;;; Awk programming configuration.
 
 ;; Make Awk indentation nice.
@@ -2196,6 +2285,9 @@ strip numbers instead."
 
 (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.
 
@@ -2229,6 +2321,21 @@ strip numbers instead."
      (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)