From c2efea9e6bb44dde3d4dd559568b48a22407f14f Mon Sep 17 00:00:00 2001 From: Tom Willemsen Date: Sun, 19 Aug 2012 00:26:15 +0200 Subject: emacs/Makefile, emacs/eshell-init.el, emacs/init.el --- emacs/eshell-init.el | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 emacs/eshell-init.el (limited to 'emacs/eshell-init.el') diff --git a/emacs/eshell-init.el b/emacs/eshell-init.el new file mode 100644 index 0000000..1dd8773 --- /dev/null +++ b/emacs/eshell-init.el @@ -0,0 +1,63 @@ +;; Eshell settings +(eval-when-compile + '(load "init.el")) + +(eval-after-load "em-term" + '(add-to-list 'eshell-visual-commands + "unison")) + +(defun oni:eshell-mode-func () + "Function for `eshell-mode-hook'." + (setq truncate-lines nil)) + +(defun oni:eshell-prompt-function () + (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 ?+) + (oni:color chameleon-1) + (oni:color scarlet-red-2)))) + " " + (propertize (substring hostname 0 -1) 'face 'mode-line-buffer-id) + " " + (propertize (oni:shorten-dir dir) 'face 'font-lock-string-face) + " " + (propertize (when (not (string= branch "")) + ;; Cut off "* " and "\n" + (substring branch 2 -1)) + 'face 'font-lock-function-name-face) + " \n" + (propertize (char-to-string userstatus) + 'face `(:foreground ,(oni:color sky-blue-1))) + "> "))) + +;;;###autoload +(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))))) + +(defun oni:shorten-dir (dir) + "Shorten a directory, (almost) like fish does it." + (while (string-match "\\(/\\.?.\\)[^/]+/" dir) + (setq dir (replace-match "\\1/" nil nil dir))) + dir) + +(setq eshell-prompt-regexp "^[#$]> ") +(setq eshell-highlight-prompt nil) +(setq eshell-prompt-function 'oni:eshell-prompt-function) +(add-hook 'eshell-mode-hook 'oni:eshell-mode-func) -- cgit v1.2.3-54-g00ecf