el/dot-emacs.el: Fix the eshell prompt algorithm.
[profile] / el / dot-emacs.el
index dc4b041..3b6d3b5 100644 (file)
@@ -137,6 +137,33 @@ library."
          ((eq side 'left) 1)
          (t 2))))
 
+(defun mdw-horizontal-window-overhead ()
+  "Computes the horizontal window overhead.
+This is the number of columns used by fringes, scroll bars and other such
+cruft."
+  (if (not window-system)
+      1
+    (let ((tot 0))
+      (dolist (what '(scroll-bar fringe))
+       (dolist (side '(left right))
+         (incf tot (funcall (intern (concat (symbol-name what) "-columns"))
+                            side))))
+      tot)))
+
+(defun mdw-split-window-horizontally (&optional width)
+  "Split a window horizontally.
+Without a numeric argument, split the window approximately in
+half.  With a numeric argument WIDTH, allocate WIDTH columns to
+the left-hand window (if positive) or -WIDTH columns to the
+right-hand window (if negative).  Space for scroll bars and
+fringes is not taken out of the allowance for WIDTH, unlike
+\\[split-window-horizontally]."
+  (interactive "P")
+  (split-window-horizontally
+   (cond ((null width) nil)
+        ((>= width 0) (+ width (mdw-horizontal-window-overhead)))
+        ((< width 0) width))))
+
 (defun mdw-divvy-window (&optional width)
   "Split a wide window into appropriate widths."
   (interactive "P")
@@ -146,16 +173,7 @@ library."
                     77)
                    (t 78)))
   (let* ((win (selected-window))
-        (sb-width (if (not window-system)
-                      1
-                    (let ((tot 0))
-                      (dolist (what '(scroll-bar fringe))
-                        (dolist (side '(left right))
-                          (incf tot
-                                (funcall (intern (concat (symbol-name what)
-                                                         "-columns"))
-                                         side))))
-                      tot)))
+        (sb-width (mdw-horizontal-window-overhead))
         (c (/ (+ (window-width) sb-width)
               (+ width sb-width))))
     (while (> c 1)
@@ -728,8 +746,9 @@ case."
   (mdw-whitespace-mode 1)
   (and (fboundp 'gtags-mode)
        (gtags-mode))
-  (outline-minor-mode t)
-  (hs-minor-mode t)
+  (if (fboundp 'hs-minor-mode)
+      (hs-minor-mode t)
+    (outline-minor-mode t))
   (reveal-mode t)
   (trap (turn-on-font-lock)))
 
@@ -847,6 +866,13 @@ doesn't match any of the regular expressions in
 (mdw-define-face comint-highlight-input
   (t nil))
 
+(mdw-define-face dired-directory
+  (t :foreground "cyan" :weight bold))
+(mdw-define-face dired-symlink
+  (t :foreground "cyan"))
+(mdw-define-face dired-perm-write
+  (t nil))
+
 (mdw-define-face trailing-whitespace
   (((class color)) :background "red")
   (t :inverse-video t))
@@ -904,6 +930,8 @@ doesn't match any of the regular expressions in
   (((type tty)) :foreground "green") (t :foreground "SeaGreen1"))
 (mdw-define-face message-header-name
   (((type tty)) :foreground "green") (t :foreground "SeaGreen1"))
+(mdw-define-face which-func
+  (t nil))
 
 (mdw-define-face diff-index
   (t :weight bold))
@@ -1912,8 +1940,7 @@ strip numbers instead."
 ;;;--------------------------------------------------------------------------
 ;;; Erlang configuration.
 
-(setq erlang-electric-commannds
-      '(erlang-electric-newline erlang-electric-semicolon))
+(setq erlang-electric-commands nil)
 
 (defun mdw-fontify-erlang ()
 
@@ -2108,13 +2135,21 @@ strip numbers instead."
            (save-match-data
              (replace-regexp-in-string "\\..*$" "" (system-name)))
            " "
-           (eshell/pwd)
+           (let* ((pwd (eshell/pwd)) (npwd (length pwd))
+                  (home (expand-file-name "~")) (nhome (length home)))
+             (if (and (>= npwd nhome)
+                      (or (= nhome npwd)
+                          (= (elt pwd nhome) ?/))
+                      (string= (substring pwd 0 nhome) home))
+                 (concat "~" (substring pwd (length home)))
+               pwd))
            right)))
 (setq eshell-prompt-function 'mdw-eshell-prompt)
 (setq eshell-prompt-regexp "^\\[[^]>]+\\(\\]\\|>>?\\)")
 
-(defalias 'eshell/e 'find-file)
-(defalias 'eshell/w3m 'w3m-goto-url)
+(defun eshell/e (file) (find-file file) nil)
+(defun eshell/ee (file) (find-file-other-window file) nil)
+(defun eshell/w3m (url) (w3m-goto-url url) nil)
 
 (mdw-define-face eshell-prompt (t :weight bold))
 (mdw-define-face eshell-ls-archive (t :weight bold :foreground "red"))