Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to remove 'Process finished' message from make-process or start-process in elisp code

I made a small elisp code which handles environment module (http://modules.sourceforge.net/) as follows:

(defun Modules-module (command)
  "foo"

  (interactive (list (read-string "Module cmd: " nil nil)))
    ;; clear cmd buffer, log buffer is replaced below

  (setq cmd-buffer (get-buffer-create "*modules-cmd*"))
  (setq log-buffer (get-buffer-create "*modules-log*"))

  (set-buffer cmd-buffer)
  (delete-region (point-min) (point-max))

  (set-buffer log-buffer)
  (delete-region (point-min) (point-max))

  ;; (start-process "Module" cmd-buffer "/usr/bin/tclsh" "/usr/share/Modules/default/libexec/modulecmd.tcl" "lisp" command)
  (make-process :name "Module" :buffer cmd-buffer :command (list "/usr/bin/tclsh" "/usr/share/Modules/default/libexec/modulecmd.tcl" "lisp" command) :stderr log-buffer)

  (set-buffer cmd-buffer)
  (beginning-of-buffer)
  (delete-matching-lines "Process")

  (set-buffer cmd-buffer)
  (if (> (buffer-size) 0)
      (eval-buffer)
    )
  )

the results are inserted into cmd-buffer successfully but the buffer has message 'Process Module finished' at the end of buffer as follows:

(setenv "LOADEDMODULES" "gcc/6.2.1")
(setenv "CXX" "g++")
(setenv "COMPILER_TYPE" "gcc")
(setenv "COMPILER_OF_TYPE" "Gcc")
(setenv "FC" "gfortran")
(setenv "COMPILER" "gnu")
(setenv "LOADEDMODULES_modshare" "gcc/6.2.1:1")
(setenv "FORTRAN_TYPE" "gfortran")

Process Module finished

Due to the 'Process Module finished', (eval-buffer) does not work.

I added (set-buffer cmd-buffer) (beginning-of-buffer) (delete-matching-lines "Process")

before the (eval-buffer) statement but failed.

My idea is 1. by using (eval-region) from the beginning of the buffer to the line before the Process finished line. or 2. remove the Process finished line and use (eval-buffer)

Any advice is grateful.

like image 481
Seong Avatar asked Oct 30 '25 20:10

Seong


1 Answers

make-process is asynchronous, so you'll want to wait for it to finish before calling eval-buffer. But as for your immediate problem, this string is simply inserted by the default process sentinel.

So just

(let ((proc (make-process ...)))
  (set-process-sentinel proc #'ignore)
  ...)

or even just

(make-process ... :sentinel #'ignore)

should get rid of it.

like image 59
Stefan Avatar answered Nov 02 '25 12:11

Stefan



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!