summaryrefslogtreecommitdiffstats
path: root/.emacs.d/init.org
diff options
context:
space:
mode:
authorGravatar Tom Willemsen2013-01-28 00:43:57 +0100
committerGravatar Tom Willemsen2013-01-28 00:43:57 +0100
commit7d719f694b745151093db7da3ad9ee9c63483368 (patch)
treecb59d313f582f79d1d11a8904ea3cd4e353aeef1 /.emacs.d/init.org
parent5a1e9f2ea8ec2b7e625539ee2bd4006dce269eb2 (diff)
downloaddotfiles-7d719f694b745151093db7da3ad9ee9c63483368.tar.gz
dotfiles-7d719f694b745151093db7da3ad9ee9c63483368.zip
Move eshell settings to org
Diffstat (limited to '.emacs.d/init.org')
-rw-r--r--.emacs.d/init.org93
1 files changed, 93 insertions, 0 deletions
diff --git a/.emacs.d/init.org b/.emacs.d/init.org
index d46e722..9caead5 100644
--- a/.emacs.d/init.org
+++ b/.emacs.d/init.org
@@ -82,3 +82,96 @@
#+BEGIN_SRC emacs-lisp :tangle init2.el
(eval-after-load "eldoc" '(diminish 'eldoc-mode))
#+END_SRC
+
+** Eshell
+
+ Add ~unison~ to the list of =eshell-visual-commands= because it
+ expects unbuffered input and eshell just doesn't give that.
+
+ #+BEGIN_SRC emacs-lisp :tangle init2.el
+ (eval-after-load "em-term"
+ '(add-to-list 'eshell-visual-commands "unison"))
+ #+END_SRC
+
+ Don't let eshell highlight it's prompt, this way I can decide the
+ colors for it myself.
+
+ #+BEGIN_SRC emacs-lisp :tangle init2.el
+ (setq eshell-highlight-prompt nil)
+ #+END_SRC
+
+ In the prompt:
+
+ - Show the exit status of the last program/command run represented
+ by a green ~+~ and a red ~-~ sign.
+ - Show the current hostname with the =mode-line-buffer-id= face.
+ - Show an abbreviation of the current directory (as seen in ~fish~)
+ using the =font-lock-string-face= face.
+ - If we're in a git repository, show the current branch with the
+ =font-lock-function-name-face= face.
+ - Show the status of priviledges in blue.
+
+ And set the =eshell-prompt-regexp= to
+
+ #+BEGIN_SRC emacs-lisp :tangle init2.el
+ (defun oni:eshell-prompt-function ()
+ "Show a pretty shell prompt."
+ (let ((status (if (zerop eshell-last-command-status) ?+ ?-))
+ (hostname (shell-command-to-string "hostname"))
+ (dir (abbreviate-file-name (eshell/pwd)))
+ (branch
+ (shell-command-to-string
+ "git branch --contains HEAD 2>/dev/null | sed -e '/^[^*]/d'"))
+ (userstatus (if (zerop (user-uid)) ?# ?$)))
+ (concat
+ (propertize (char-to-string status)
+ 'face `(:foreground ,(if (= status ?+)
+ "green"
+ "red")))
+ " "
+ (propertize (substring hostname 0 -1) 'face 'mode-line-buffer-id)
+ " "
+ (propertize (oni:shorten-dir dir) 'face 'font-lock-string-face)
+ " "
+ (when (not (string= branch ""))
+ (propertize
+ ;; Cut off "* " and "\n"
+ (substring branch 2 -1)
+ 'face 'font-lock-function-name-face))
+ " \n"
+ (propertize (char-to-string userstatus)
+ 'face `(:foreground "blue"))
+ "> ")))
+
+ (setq eshell-prompt-function 'oni:eshell-prompt-function
+ eshell-prompt-regexp "^[#$]> ")
+ #+END_SRC
+
+ Don't truncate lines in eshell, wrap them.
+
+ #+BEGIN_SRC emacs-lisp :tangle init2.el
+ (defun oni:eshell-mode-func ()
+ "Function for `eshell-mode-hook'."
+ (setq truncate-lines nil))
+
+ (add-hook 'eshell-mode-hook 'oni:eshell-mode-func)
+ #+END_SRC
+
+ Bind the ~f8~ key to easily show eshell.
+
+ #+BEGIN_SRC emacs-lisp :tangle init2.el
+ (defun oni:raise-eshell ()
+ "Start or switch back to `eshell'.
+ Also change directories to current working directory."
+ (interactive)
+ (let ((dir (file-name-directory
+ (or (buffer-file-name) "~/")))
+ (hasfile (not (eq (buffer-file-name) nil))))
+ (eshell)
+ (if (and hasfile (eq eshell-process-list nil))
+ (progn
+ (eshell/cd dir)
+ (eshell-reset)))))
+
+ (global-set-key (kbd "<f8>") 'oni:raise-eshell)
+ #+END_SRC