-(use-package eshell
- :commands eshell
- :bind ("C-c a s e" . eshell)
- :config
- (eval-when-compile (defvar eshell-prompt-regexp))
- (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)))
+;;; bandali-eshell.el --- bandali's Eshell setup -*- lexical-binding: t; -*-
- (defun b/eshell-clear ()
- (interactive)
- (let ((inhibit-read-only t))
- (erase-buffer))
- (eshell-send-input))
+;; Copyright (C) 2018-2020 Amin Bandali
- (defun b/eshell-setup ()
- (make-local-variable 'company-idle-delay)
- (defvar company-idle-delay)
- (setq company-idle-delay nil)
- (bind-keys :map eshell-mode-map
- ("C-d" . b/eshell-quit-or-delete-char)
- ("C-S-l" . b/eshell-clear)
- ("M-r" . counsel-esh-history)
- ;; ([tab] . company-complete)
- :map eshell-hist-mode-map
- ("M-r" . counsel-esh-history)))
-
- (setq
+;; Author: Amin Bandali <bandali@gnu.org>
+;; 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 <https://www.gnu.org/licenses/>.
+
+;;; 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 ()
(propertize "#" 'face 'red)
(propertize "$" 'face 'default))
(propertize " " 'face 'default))))
-
- :hook (eshell-mode . b/eshell-setup)
- :custom
- (eshell-hist-ignoredups t)
- (eshell-input-filter 'eshell-input-filter-initial-space))
+ (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