From e81d8814d73a96365127f994f430e951fd7a1435 Mon Sep 17 00:00:00 2001 From: Pierre Neidhardt Date: Mon, 8 Jun 2020 10:37:52 +0200 Subject: [PATCH] shell: Fix helm-ff's M-e when point is not on prompt. --- .emacs.d/lisp/init-shell.el | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) 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)