diff options
author | Tom Willemsen | 2013-01-28 00:43:57 +0100 |
---|---|---|
committer | Tom Willemsen | 2013-01-28 00:43:57 +0100 |
commit | 7d719f694b745151093db7da3ad9ee9c63483368 (patch) | |
tree | cb59d313f582f79d1d11a8904ea3cd4e353aeef1 /.emacs.d/init.org | |
parent | 5a1e9f2ea8ec2b7e625539ee2bd4006dce269eb2 (diff) | |
download | dotfiles-7d719f694b745151093db7da3ad9ee9c63483368.tar.gz dotfiles-7d719f694b745151093db7da3ad9ee9c63483368.zip |
Move eshell settings to org
Diffstat (limited to '.emacs.d/init.org')
-rw-r--r-- | .emacs.d/init.org | 93 |
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 |