From 2f4b7f51aa8bd18af1bb31006a59c29c2adae885 Mon Sep 17 00:00:00 2001 From: jao Date: Thu, 11 Nov 2021 22:17:26 +0000 Subject: nih: i like my eshell toggling better --- init.org | 60 +++++++++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 49 insertions(+), 11 deletions(-) (limited to 'init.org') diff --git a/init.org b/init.org index 2efe61f..c8dd9f7 100644 --- a/init.org +++ b/init.org @@ -1,5 +1,4 @@ #+property: header-args :lexical t :tangle yes :comments yes :results silent :shebang ";; -*- lexical-binding: t -*-" :tangle-mode (identity #o644) -#+auto_tangle: t * Packages *** Use package @@ -1924,16 +1923,55 @@ #+END_SRC ***** Toggle #+begin_src emacs-lisp - (use-package eshell-toggle - :ensure t - :demand t) - - (defun jao-eshell-toggle (git-root) - (interactive "P") - (let ((eshell-toggle-use-git-root git-root)) - (eshell-toggle))) - - (global-set-key (kbd "") #'jao-eshell-toggle) + (defun jao-eshell-here--find-window (b) + (when-let (w (seq-find (lambda (w) (eq (window-buffer w) b)) + (window-list))) + (select-window w))) + + (defun jao-eshell-frame-buffer (&optional b) + (let ((p 'jao-eshell-buffer)) + (if b (set-frame-parameter nil p b) (frame-parameter nil p)))) + + (defun jao-eshell--cd-here (&optional dir) + (eshell-kill-input) + (eshell/cd (or dir default-directory)) + (insert "\n") + (eshell-send-input)) + + (defun jao-eshell-here (&optional stay) + (interactive "p") + (message "%s" stay) + (let ((b (jao-eshell-frame-buffer)) + (dir (cond ((> stay 4) default-directory) + ((> stay 1) + (project-root + (or (project-current) + `(transient . ,default-directory))))))) + (jao-with-attached-buffer "^\\*eshell" 30 + (if (buffer-live-p b) + (progn (pop-to-buffer b nil t) + (eshell-save-some-history) + (when dir (jao-eshell--cd-here dir))) + (let ((default-directory (or dir default-directory))) + (eshell)) + (jao-eshell-frame-buffer (current-buffer)))))) + + (defun eshell/x () + (when (derived-mode-p 'eshell-mode) + (when (fboundp 'eshell-autojump-save) + (eshell-autojump-save)) + (eshell-save-some-history) + (if (> (frame-height) (window-height)) + (delete-window) + (bury-buffer)))) + + (defun jao-eshell-here-toggle (stay) + (interactive "p") + (if (eq (current-buffer) (jao-eshell-frame-buffer)) + (eshell/x) + (jao-eshell-here stay))) + + (global-set-key [(f1)] #'jao-eshell-here-toggle) #+end_src ***** Workarounds #+begin_src emacs-lisp -- cgit v1.2.3