summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--emacs/custom/fcuny-eshell.el23
1 files changed, 22 insertions, 1 deletions
diff --git a/emacs/custom/fcuny-eshell.el b/emacs/custom/fcuny-eshell.el
index 53c3f69..2f53988 100644
--- a/emacs/custom/fcuny-eshell.el
+++ b/emacs/custom/fcuny-eshell.el
@@ -51,6 +51,25 @@
   (magit-status (pop args) nil)
   (eshell/echo))   ;; The echo command suppresses output
 
+(defun fcuny/eshell--open-or-cd (path)
+  "Cd to PATH if path is a directory ((file-name-directory path) => t), otherwise open PATH via `find-file'."
+  (interactive)
+  (if (file-directory-p path)
+      (progn
+        (goto-char (point-max))
+        (insert (concat "cd " path))
+        (eshell-send-input))
+    (find-file path)))
+
+(defun fcuny/eshell-open-file-at-point ()
+  (interactive)
+  (let ((filename (symbol-name (symbol-at-point))))
+    (cond
+     ((file-readable-p filename)
+      (fcuny/eshell--open-or-cd filename))
+     ((file-readable-p (expand-file-name filename))
+      (fcuny/eshell--open-or-cd (expand-file-name filename))))))
+
 (defun fcuny/shorten-path (path &optional max-len)
   "Return a potentially trimmed-down version of the directory PATH, replacing
 parent directories with their initial characters to try to get the character
@@ -168,7 +187,9 @@ append to it, while separating multiple outputs with
   :commands (eshell eshell-command)
   :bind (("C-c e h" . fcuny/eshell-here)
          ("C-c e e" . fcuny/eshell-export)
-         ("C-c r"   . counsel-esh-history))
+         ("C-c r"   . counsel-esh-history)
+         :map eshell-mode-map
+         ("C-o" . fcuny/eshell-open-file-at-point))
   :custom
   (eshell-scroll-to-bottom-on-input 'all)
   (eshell-error-if-no-glob t)