From acc26e8d72f646d46fa57ecad39444702bb8564f Mon Sep 17 00:00:00 2001 From: Jessie Hildebrandt Date: Thu, 26 Jan 2023 05:49:18 -0500 Subject: [PATCH] Add "force new session" eshell bind --- init.el | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/init.el b/init.el index 56490ac..53d2b81 100644 --- a/init.el +++ b/init.el @@ -448,16 +448,22 @@ DOCSTRING is an optional form that is discarded upon expansion." (concat (propertize str 'face 'font-lock-comment-face) (propertize (cl-reduce (lambda (a b) (concat a "/" b)) components) 'face 'font-lock-doc-face)))) -(defun user/open-eshell () - "Switch to an active unfocused `eshell' session, or start a new one." +(defun user/open-eshell (&optional force-new-session) + "Focus the last active `eshell' session, or start a new one if none unavaiable. + +When FORCE-NEW-SESSION is non-nil, a new session will be started even if there +is already an active session to switch to or focus." (interactive) (let ((eshell-buffer (cl-find-if (lambda (buffer) (eq (buffer-local-value 'major-mode buffer) 'eshell-mode)) (buffer-list)))) (if eshell-buffer - (if (eq (current-buffer) eshell-buffer) - (eshell :new-session) + (if force-new-session + (let ((current-buffer-directory default-directory)) + (pop-to-buffer eshell-buffer '((display-buffer-reuse-window display-buffer-same-window))) + (let ((default-directory current-buffer-directory)) + (eshell :new-session))) (pop-to-buffer eshell-buffer '((display-buffer-reuse-window display-buffer-same-window)))) (eshell)))) @@ -488,7 +494,8 @@ DOCSTRING is an optional form that is discarded upon expansion." tab-line-tabs-function #'tab-line-tabs-mode-buffers) (tab-line-mode))) :bind - ("C-c RET" . user/open-eshell)) + ("C-c RET" . user/open-eshell) + ("C-c C-" . (lambda () (interactive) (user/open-eshell :force-new-session)))) ;; `eshell-mode-map' is not available until the `esh-mode' module is loaded, so ;; the local keymap bindings are set up here