[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[nongnu] elpa/bash-completion ffb3f88aaf: Improve Bash process detection
From: |
ELPA Syncer |
Subject: |
[nongnu] elpa/bash-completion ffb3f88aaf: Improve Bash process detection (#60) |
Date: |
Wed, 1 Feb 2023 13:58:21 -0500 (EST) |
branch: elpa/bash-completion
commit ffb3f88aaf0db92ea4a2b6c60ea11d4a19245852
Author: montag451 <montag451@laposte.net>
Commit: GitHub <noreply@github.com>
Improve Bash process detection (#60)
The current way of checking if a process is a Bash process is not
correct particularly with remote Bash processes. For example if the
user shell on the local machine is zsh then `shell-file-name' will be
equal to zsh and `bash-completion--current-shell' will return nil for
a remote Bash process (assuming `explicit-shell-file-name' is nil and
the ESHELL environment variable is not set). The new way of checking
if a process is a Bash process is more robust as it is not based on
the checking of the `explicit-shell-file-name' variable, the ESHELL
environment variable, the `shell-file-name' variable or the local
command used to launch the Bash process.
---
bash-completion.el | 52 +++++++++++++++++++++++++++++++++++++---------------
1 file changed, 37 insertions(+), 15 deletions(-)
diff --git a/bash-completion.el b/bash-completion.el
index a2f5f6df01..4457ed9c3d 100644
--- a/bash-completion.el
+++ b/bash-completion.el
@@ -113,6 +113,7 @@
(require 'comint)
(require 'cl-lib)
(require 'shell)
+(require 'rx)
;;; Customization
(defgroup bash-completion nil
@@ -1168,18 +1169,40 @@ is set to t."
(bash-completion-kill process)
(error nil)))))))))
-(defun bash-completion--current-shell ()
- "Figure out what the shell associated with the current buffer is."
- (let ((prog (or
- (if (derived-mode-p 'shell-mode)
- (or explicit-shell-file-name
- (getenv "ESHELL")
- shell-file-name))
- (let ((process (get-buffer-process (current-buffer))))
- (when process
- (car (process-command process)))))))
- (when prog
- (file-name-nondirectory prog))))
+(defun bash-completion--process-command (process)
+ "Return the command that was executed to start PROCESS.
+It is similar to `process-command' but if the process is a remote
+process, it returns the remote command."
+ (with-current-buffer (process-buffer process)
+ (or (and (file-remote-p default-directory)
+ (process-get process 'remote-command))
+ (process-command process))))
+
+(defun bash-completion--process-start-program (process)
+ "Return the program that was executed to start PROCESS."
+ (car (bash-completion--process-command process)))
+
+(defun bash-completion--process-running-program (process)
+ "Return the program currently executed by PROCESS."
+ (with-current-buffer (process-buffer process)
+ (let* ((remote (file-remote-p default-directory))
+ (pid (or (and remote (process-get process 'remote-pid))
+ (process-id process))))
+ (file-truename (concat remote (format "/proc/%d/exe" pid))))))
+
+(defun bash-completion--is-bash-process (process)
+ "Return a non-nil value if PROCESS is a Bash process."
+ (pcase (process-get process 'is-bash)
+ ('true t)
+ ('false nil)
+ (_ (let* ((res (cl-some
+ (lambda (fun)
+ (bash-completion-starts-with
+ (file-name-nondirectory (funcall fun process)) "bash"))
+ (list #'bash-completion--process-running-program
+ #'bash-completion--process-start-program))))
+ (process-put process 'is-bash (if res 'true 'false))
+ res))))
(defun bash-completion--get-same-process ()
"Return the BASH process associated with the current buffer.
@@ -1189,9 +1212,8 @@ associated with a command that looks like a bash shell.
Completion will fallback to creating a separate process
completion in these cases."
(when (derived-mode-p 'comint-mode)
- (let* ((process (get-buffer-process (current-buffer)))
- (shell (if process (bash-completion--current-shell))))
- (when (and shell (bash-completion-starts-with shell "bash"))
+ (let* ((process (get-buffer-process (current-buffer))))
+ (when (bash-completion--is-bash-process process)
process))))
(defun bash-completion--get-process ()
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [nongnu] elpa/bash-completion ffb3f88aaf: Improve Bash process detection (#60),
ELPA Syncer <=