From 23ee78b00512ea0001f8e21646a725ac13c96e17 Mon Sep 17 00:00:00 2001 From: Stefan Kangas Date: Thu, 3 Sep 2020 14:30:53 +0200 Subject: [PATCH] Support bookmarking Eshell buffers * lisp/eshell/esh-mode.el (eshell-bookmark-name) (eshell-bookmark-make-record, eshell-bookmark-jump): New defuns. (eshell-mode): Set up bookmark handler. --- lisp/eshell/esh-mode.el | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/lisp/eshell/esh-mode.el b/lisp/eshell/esh-mode.el index 8799007c596..791d472ec03 100644 --- a/lisp/eshell/esh-mode.el +++ b/lisp/eshell/esh-mode.el @@ -329,6 +329,8 @@ and the hook `eshell-exit-hook'." (if mode-line-elt (setcar mode-line-elt 'eshell-command-running-string)))) + (set (make-local-variable 'bookmark-make-record-function) + 'eshell-bookmark-make-record) (setq local-abbrev-table eshell-mode-abbrev-table) (set (make-local-variable 'list-buffers-directory) @@ -1015,5 +1017,28 @@ This function could be in the list `eshell-output-filter-functions'." (custom-add-option 'eshell-output-filter-functions 'eshell-handle-ansi-color) +;;; Bookmark support: + +(declare-function bookmark-make-record-default + "bookmark" (&optional no-file no-context posn)) +(declare-function bookmark-prop-get "bookmark" (bookmark prop)) + +(defun eshell-bookmark-name () + (format "eshell-%s" + (file-name-nondirectory + (directory-file-name + (file-name-directory default-directory))))) + +(defun eshell-bookmark-make-record () + "Create a bookmark for the current Eshell buffer." + `(,(eshell-bookmark-name) + (location . ,default-directory) + (handler . eshell-bookmark-jump))) + +(defun eshell-bookmark-jump (bookmark) + "Default bookmark handler for Eshell buffers." + (let ((default-directory (bookmark-prop-get bookmark 'location))) + (eshell))) + (provide 'esh-mode) ;;; esh-mode.el ends here -- 2.39.2