diff options
Diffstat (limited to 'emacs/.config/emacs-kj/init.el')
-rw-r--r-- | emacs/.config/emacs-kj/init.el | 30 |
1 files changed, 29 insertions, 1 deletions
diff --git a/emacs/.config/emacs-kj/init.el b/emacs/.config/emacs-kj/init.el index bbc6640..bc28b8c 100644 --- a/emacs/.config/emacs-kj/init.el +++ b/emacs/.config/emacs-kj/init.el @@ -107,6 +107,35 @@ ;; `M-x shell` settings (setq shell-prompt-pattern "^[^#$%>\n]*[#$%>❯] *") (setq explicit-shell-file-name "zsh") +(defun kj/shell-buffer-name () + (concat "*shell:" default-directory "*")) + +(defun kj/shell-here () + (interactive) + (shell (kj/shell-buffer-name))) + +(add-hook 'shell-mode-hook + (defun kj/kill-shell-buffer-on-exit () + (let* ((proc (get-buffer-process (current-buffer))) + (sentinel (process-sentinel proc))) + (set-process-sentinel + proc + `(lambda (proc signal) + (funcall ',sentinel proc signal) + (and (memq (process-status proc) '(exit signal)) + (buffer-live-p (process-buffer proc)) + (message "Shell died, killing buffer %s" + (process-buffer proc)) + (kill-buffer (process-buffer proc)))))))) + +(add-hook 'comint-output-filter-functions #'comint-osc-process-output) + +;; Update buffer name to reflect directory. +(advice-add 'cd :after + (defun kj/maybe-rename-shell (&rest args) + (and (derived-mode-p 'shell-mode) + (rename-buffer + (kj/shell-buffer-name))))) (use-package rainbow-delimiters :defer t @@ -808,4 +837,3 @@ ;; Restore gc. (setq gc-cons-threshold (* 16 1024 1024)) - |