diff --git a/.emacs.d/lisp/init-shell.el b/.emacs.d/lisp/init-shell.el index 21d08224..1f49c571 100644 --- a/.emacs.d/lisp/init-shell.el +++ b/.emacs.d/lisp/init-shell.el @@ -1,10 +1,10 @@ (defun ambrevar/helm-ff--shell-interactive-buffer-p (buffer) (with-current-buffer buffer - ;; (and (save-excursion - ;; (goto-char (point-min)) - ;; (eshell-next-prompt 1) - ;; (null (eql (point) (point-min))))) - (eq major-mode 'shell-mode))) + (and (eq major-mode 'shell-mode) + (save-excursion + (goto-char (point-min)) + (comint-next-prompt 1) + (null (eql (point) (point-min))))))) (defun ambrevar/helm-ff-switch-to-shell (_candidate) "Like `helm-ff-switch-to-eshell' but for `M-x shell'. @@ -14,10 +14,17 @@ prefix arg provided and more than one shell buffer exists, provide completions on those buffers. If only one shell buffer exists, switch to this one, if no shell buffer exists or if the numeric prefix arg shell buffer doesn't exists, create it and switch to it." - (let ((cd-shell (lambda () - (comint-delete-input) - (insert (format "cd %s" (shell-quote-argument helm-ff-default-directory))) - (comint-send-input))) + (let ((cd-shell + (lambda () + (goto-char (point-max)) + (comint-delete-input) + (insert (format "cd %s" + (shell-quote-argument + (if (tramp-tramp-file-p helm-ff-default-directory) + (tramp-file-name-localname + (tramp-dissect-file-name helm-ff-default-directory)) + helm-ff-default-directory)))) + (comint-send-input))) (bufs (cl-loop for b in (mapcar 'buffer-name (buffer-list)) when (ambrevar/helm-ff--shell-interactive-buffer-p b) collect b))) @@ -28,6 +35,7 @@ prefix arg shell buffer doesn't exists, create it and switch to it." (car bufs))) (switch-to-buffer it) (shell)) + ;; TODO: Can we check if a process is currently running within the running shell? (funcall cd-shell))) (advice-add 'helm-ff-switch-to-eshell :override 'ambrevar/helm-ff-switch-to-shell)