Commit 829347cef2ee

Vincent Demeester <vincent@sbr.pm>
2021-10-13 16:23:49
tools/emacs: add eshell/j to jump folders in eshell
Signed-off-by: Vincent Demeester <vincent@sbr.pm>
1 parent 9f38d57
Changed files (1)
tools
emacs
tools/emacs/config/config-shells.el
@@ -73,6 +73,27 @@ The EShell is renamed to match that directory to make multiple windows easier."
                                                   (error "Don't know how to extract %s" file)))
                                    file)))
 
+  ;; From https://karthinks.com/software/jumping-directories-in-eshell/
+  (defun eshell/j (&optional regexp)
+    "Navigate to a previously visited directory in eshell, or to
+any directory proferred by `consult-dir'."
+    (let ((eshell-dirs (delete-dups
+                        (mapcar 'abbreviate-file-name
+                                (ring-elements eshell-last-dir-ring)))))
+      (cond
+       ((and (not regexp) (featurep 'consult-dir))
+        (let* ((consult-dir--source-eshell `(:name "Eshell"
+                                                   :narrow ?e
+                                                   :category file
+                                                   :face consult-file
+                                                   :items ,eshell-dirs))
+               (consult-dir-sources (cons consult-dir--source-eshell
+                                          consult-dir-sources)))
+          (eshell/cd (substring-no-properties
+                      (consult-dir--pick "Switch directory: ")))))
+       (t (eshell/cd (if regexp (eshell-find-previous-directory regexp)
+                       (completing-read "cd: " eshell-dirs)))))))
+
   (add-hook
    'eshell-mode-hook
    (lambda ()