]> git.eshelyaron.com Git - emacs.git/commitdiff
Support bookmarking Eshell buffers
authorStefan Kangas <stefankangas@gmail.com>
Thu, 3 Sep 2020 12:30:53 +0000 (14:30 +0200)
committerStefan Kangas <stefankangas@gmail.com>
Thu, 3 Sep 2020 12:36:38 +0000 (14:36 +0200)
* 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

index 8799007c5962b531bae6cd8c8c6e5f82bcaa5f64..791d472ec0371a802a5010684978fd41afdd7b85 100644 (file)
@@ -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