X-Git-Url: https://git.shemshak.org/~bandali/configs/blobdiff_plain/927b50b7aec2da105bd5125dec272a89e38663c3..d7dee82420a04e5c92e5b5ad316e14a49bd4d689:/.emacs.d/lisp/bandali-eshell.el?ds=sidebyside diff --git a/.emacs.d/lisp/bandali-eshell.el b/.emacs.d/lisp/bandali-eshell.el new file mode 100644 index 0000000..820dc05 --- /dev/null +++ b/.emacs.d/lisp/bandali-eshell.el @@ -0,0 +1,86 @@ +;;; bandali-eshell.el --- bandali's Eshell setup -*- lexical-binding: t; -*- + +;; Copyright (C) 2018-2020 Amin Bandali + +;; Author: Amin Bandali +;; Keywords: processes + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: + +;; My awesome Eshell setup. + +;;; Code: + +(with-eval-after-load 'eshell + (make-directory (b/etc "eshell/") t) + (csetq + eshell-aliases-file (b/etc "eshell/aliases") + eshell-directory-name (b/var "eshell/") + eshell-hist-ignoredups t + eshell-input-filter #'eshell-input-filter-initial-space + eshell-prompt-regexp "\\(.*\n\\)*[$#] " + eshell-prompt-function + (lambda () + (concat + (propertize (format "%s@%s:" (user-login-name) (system-name)) + 'face 'default) + (propertize (abbreviate-file-name default-directory) + 'face 'font-lock-comment-face) + (propertize "\n" 'face 'default) + (if (= (user-uid) 0) + (propertize "#" 'face 'red) + (propertize "$" 'face 'default)) + (propertize " " 'face 'default)))) + (eval-when-compile + (defvar eshell-prompt-regexp) + (declare-function eshell-life-is-too-much "esh-mode") + (declare-function eshell-send-input "esh-mode" + (&optional use-region queue-p no-newline))) + (defun b/eshell-quit-or-delete-char (arg) + (interactive "p") + (if (and (eolp) (looking-back eshell-prompt-regexp nil)) + (eshell-life-is-too-much) + (delete-char arg))) + (defun b/eshell-clear () + (interactive) + (let ((inhibit-read-only t)) + (erase-buffer)) + (eshell-send-input)) + (defun b/eshell-setup () + (make-local-variable 'company-idle-delay) + (defvar company-idle-delay) + (eval-when-compile + (defvar eshell-mode-map) + (defvar eshell-hist-mode-map)) + (setq company-idle-delay nil) + ;; local key bindings + (define-key eshell-mode-map (kbd "C-d") + #'b/eshell-quit-or-delete-char) + (define-key eshell-mode-map (kbd "C-S-l") + #'b/eshell-clear) + (define-key eshell-mode-map (kbd "M-r") + #'counsel-esh-history) + ;; (define-key eshell-mode-map [tab] + ;; #'company-complete) + (define-key eshell-hist-mode-map (kbd "M-r") + #'counsel-esh-history))) +;; global key bindings +(global-set-key (kbd "C-c a s e") #'eshell) +;; hooks +(add-hook 'eshell-mode-hook #'b/eshell-setup) + +(provide 'bandali-eshell) +;;; bandali-eshell.el ends here