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.