用了 process-send-string
函数在 shell buffer
中执行了一个脚本后,可以在程序中判断出这个 shell buffer
中的脚本或命令有没有执行完吗?
描述最好严谨&详细,必要时附图/代码。
我假设你说的 shell buffer 是 M-x shell
产生 buffer,而不是一个笼统的 shell 或 buffer 概念:
-
M-x shell
-
在
*shell*
buffer 执行M-: (car (process-command (get-buffer-process (current-buffer))))
确定当前 shell 命令,我这边是:"/bin/bash" -
在
*shell*
buffer 里执行top
命令 -
执行
M-: (shell-command-to-string "pgrep top")
得到 “77586\n”,就是刚才启动的进程的ID -
接着用这段代码应该能获取到ID:
(process-running-child-p (car (seq-filter (lambda (it) (string= "/bin/bash" ;; <-- 由第 2. 步得到 (car (process-command it)))) (process-list)))) ;; => 77586
UPDATE:
如果 buffer 名称是确定的:
(when-let (proc (get-buffer-process (get-buffer "*shell*<2>")))
(process-running-child-p proc))
;; => 54152
1 个赞
我觉得他说的是
如果不是 也可以用filter的吧
好的,非常感谢大佬指出的问题,下次我注意
谢谢谢谢
试试:
(defun earned::shell-busy-p ()
(when (eq major-mode (quote shell-mode))
(not
(string-match
comint-prompt-regexp
(buffer-substring-no-properties (car comint-last-prompt) (cdr comint-last-prompt))))))