* How to defun body in procedural manner @ 2009-04-17 1:28 Kiwon Um 2009-04-17 4:37 ` Barry Margolin ` (2 more replies) 0 siblings, 3 replies; 13+ messages in thread From: Kiwon Um @ 2009-04-17 1:28 UTC (permalink / raw) To: help-gnu-emacs Hello. I wrote a function as follows: (defun my-update-package (path) "Update the package in path from CVS" (cvs-update path nil) (shell-command (concat "touch `find " path " -name Makefile`")) (compile (concat "make -C " path))) When the function is called, it seems to execute the shell-command and compile lines before the finishing cvs-update line. How can I make this functional execution procedurally? Help me, please. Thanks. ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: How to defun body in procedural manner 2009-04-17 1:28 How to defun body in procedural manner Kiwon Um @ 2009-04-17 4:37 ` Barry Margolin 2009-04-17 5:29 ` Kiwon Um 2009-04-17 5:52 ` thierry.volpiatto [not found] ` <mailman.5512.1239947972.31690.help-gnu-emacs@gnu.org> 2 siblings, 1 reply; 13+ messages in thread From: Barry Margolin @ 2009-04-17 4:37 UTC (permalink / raw) To: help-gnu-emacs In article <54d389f8-ce90-428d-8fa1-a88c971589d5@d2g2000pra.googlegroups.com>, Kiwon Um <um.kiwon@gmail.com> wrote: > Hello. I wrote a function as follows: > > (defun my-update-package (path) > "Update the package in path from CVS" > (cvs-update path nil) > (shell-command (concat "touch `find " path " -name Makefile`")) > (compile (concat "make -C " path))) > > When the function is called, it seems to execute the shell-command and > compile lines before the finishing cvs-update line. How can I make > this functional execution procedurally? Help me, please. Lisp does execute procedurally. The problem is that cvs-update starts a background process to do the work, and then returns. -- Barry Margolin, barmar@alum.mit.edu Arlington, MA *** PLEASE post questions in newsgroups, not directly to me *** *** PLEASE don't copy me on replies, I'll read them in the group *** ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: How to defun body in procedural manner 2009-04-17 4:37 ` Barry Margolin @ 2009-04-17 5:29 ` Kiwon Um 0 siblings, 0 replies; 13+ messages in thread From: Kiwon Um @ 2009-04-17 5:29 UTC (permalink / raw) To: help-gnu-emacs On 4월17일, 오후1시37분, Barry Margolin <bar...@alum.mit.edu> wrote: > In article > <54d389f8-ce90-428d-8fa1-a88c97158...@d2g2000pra.googlegroups.com>, > Kiwon Um <um.ki...@gmail.com> wrote: > > > Hello. I wrote a function as follows: > > > (defun my-update-package (path) > > "Update the package in path from CVS" > > (cvs-update path nil) > > (shell-command (concat "touch `find " path " -name Makefile`")) > > (compile (concat "make -C " path))) > > > When the function is called, it seems to execute the shell-command and > > compile lines before the finishing cvs-update line. How can I make > > this functional execution procedurally? Help me, please. > > Lisp does execute procedurally. The problem is that cvs-update starts a > background process to do the work, and then returns. > > -- > Barry Margolin, bar...@alum.mit.edu > Arlington, MA > *** PLEASE post questions in newsgroups, not directly to me *** > *** PLEASE don't copy me on replies, I'll read them in the group *** Thanks for your reply. So how can I check the return time of the background process? ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: How to defun body in procedural manner 2009-04-17 1:28 How to defun body in procedural manner Kiwon Um 2009-04-17 4:37 ` Barry Margolin @ 2009-04-17 5:52 ` thierry.volpiatto [not found] ` <mailman.5512.1239947972.31690.help-gnu-emacs@gnu.org> 2 siblings, 0 replies; 13+ messages in thread From: thierry.volpiatto @ 2009-04-17 5:52 UTC (permalink / raw) To: help-gnu-emacs Hi, i don't use cvs, but you should have a look at what return: `cvs-sentinel'. and: (when (cvs-sentinel ==> return_what_you_want) (shell-command "your_command")) Kiwon Um <um.kiwon@gmail.com> writes: > Hello. I wrote a function as follows: > > (defun my-update-package (path) > "Update the package in path from CVS" > (cvs-update path nil) > (shell-command (concat "touch `find " path " -name Makefile`")) > (compile (concat "make -C " path))) > > When the function is called, it seems to execute the shell-command and > compile lines before the finishing cvs-update line. How can I make > this functional execution procedurally? Help me, please. > > Thanks. > -- A + Thierry Volpiatto Location: Saint-Cyr-Sur-Mer - France ^ permalink raw reply [flat|nested] 13+ messages in thread
[parent not found: <mailman.5512.1239947972.31690.help-gnu-emacs@gnu.org>]
* Re: How to defun body in procedural manner [not found] ` <mailman.5512.1239947972.31690.help-gnu-emacs@gnu.org> @ 2009-04-17 9:52 ` Kiwon Um 2009-04-17 12:51 ` thierry.volpiatto [not found] ` <mailman.5523.1239973116.31690.help-gnu-emacs@gnu.org> 0 siblings, 2 replies; 13+ messages in thread From: Kiwon Um @ 2009-04-17 9:52 UTC (permalink / raw) To: help-gnu-emacs On Apr 17, 2:52 pm, thierry.volpia...@gmail.com wrote: > Hi, i don't use cvs, but you should have a look at what return: > `cvs-sentinel'. > and: > (when (cvs-sentinel ==> return_what_you_want) > (shell-command "your_command")) > I've tried to understand what the cvs-sentinel function does, but I didn't. Would you write a concrete example code for me, please? > Kiwon Um <um.ki...@gmail.com> writes: > > Hello. I wrote a function as follows: > > > (defun my-update-package (path) > > "Update the package in path from CVS" > > (cvs-update path nil) > > (shell-command (concat "touch `find " path " -name Makefile`")) > > (compile (concat "make -C " path))) > > > When the function is called, it seems to execute the shell-command and > > compile lines before the finishing cvs-update line. How can I make > > this functional execution procedurally? Help me, please. > > > Thanks. > > -- > A + Thierry Volpiatto > Location: Saint-Cyr-Sur-Mer - France ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: How to defun body in procedural manner 2009-04-17 9:52 ` Kiwon Um @ 2009-04-17 12:51 ` thierry.volpiatto [not found] ` <mailman.5523.1239973116.31690.help-gnu-emacs@gnu.org> 1 sibling, 0 replies; 13+ messages in thread From: thierry.volpiatto @ 2009-04-17 12:51 UTC (permalink / raw) To: help-gnu-emacs Kiwon Um <um.kiwon@gmail.com> writes: > On Apr 17, 2:52 pm, thierry.volpia...@gmail.com wrote: >> Hi, i don't use cvs, but you should have a look at what return: >> `cvs-sentinel'. >> and: >> (when (cvs-sentinel ==> return_what_you_want) >> (shell-command "your_command")) >> > > I've tried to understand what the cvs-sentinel function does, but I > didn't. Would you write a concrete example code for me, please? Yes, as i told you i am not a cvs user, so... it seem cvs-sentinel return only a message :-( So try that, i just write it and it worked to update emacs-w3m and compile it: (defun update-cvs-dir-and-compile () (interactive) (let ((dir default-directory)) (cvs-update dir nil) (while (not (equal cvs-mode-line-process "exit")) (sit-for 1)) (shell-command "make"))) Modify for your need (make args ...etc..) >> Kiwon Um <um.ki...@gmail.com> writes: >> > Hello. I wrote a function as follows: >> >> > (defun my-update-package (path) >> > "Update the package in path from CVS" >> > (cvs-update path nil) >> > (shell-command (concat "touch `find " path " -name Makefile`")) >> > (compile (concat "make -C " path))) >> >> > When the function is called, it seems to execute the shell-command and >> > compile lines before the finishing cvs-update line. How can I make >> > this functional execution procedurally? Help me, please. >> >> > Thanks. >> >> -- >> A + Thierry Volpiatto >> Location: Saint-Cyr-Sur-Mer - France > > -- A + Thierry Volpiatto Location: Saint-Cyr-Sur-Mer - France ^ permalink raw reply [flat|nested] 13+ messages in thread
[parent not found: <mailman.5523.1239973116.31690.help-gnu-emacs@gnu.org>]
* Re: How to defun body in procedural manner [not found] ` <mailman.5523.1239973116.31690.help-gnu-emacs@gnu.org> @ 2009-04-18 6:58 ` Kiwon Um 2009-04-20 7:44 ` Kiwon Um 1 sibling, 0 replies; 13+ messages in thread From: Kiwon Um @ 2009-04-18 6:58 UTC (permalink / raw) To: help-gnu-emacs On 4월17일, 오후9시51분, thierry.volpia...@gmail.com wrote: > Kiwon Um <um.ki...@gmail.com> writes: > > On Apr 17, 2:52 pm, thierry.volpia...@gmail.com wrote: > >> Hi, i don't use cvs, but you should have a look at what return: > >> `cvs-sentinel'. > >> and: > >> (when (cvs-sentinel ==> return_what_you_want) > >> (shell-command "your_command")) > > > I've tried to understand what the cvs-sentinel function does, but I > > didn't. Would you write a concrete example code for me, please? > > Yes, as i told you i am not a cvs user, so... > it seem cvs-sentinel return only a message :-( > So try that, i just write it and it worked to update emacs-w3m and compile > it: > > (defun update-cvs-dir-and-compile () > (interactive) > (let ((dir default-directory)) > (cvs-update dir nil) > (while (not (equal cvs-mode-line-process "exit")) > (sit-for 1)) > (shell-command "make"))) > > Modify for your need (make args ...etc..) > These codes work very well. Thanks. :) > > > >> Kiwon Um <um.ki...@gmail.com> writes: > >> > Hello. I wrote a function as follows: > > >> > (defun my-update-package (path) > >> > "Update the package in path from CVS" > >> > (cvs-update path nil) > >> > (shell-command (concat "touch `find " path " -name Makefile`")) > >> > (compile (concat "make -C " path))) > > >> > When the function is called, it seems to execute the shell-command and > >> > compile lines before the finishing cvs-update line. How can I make > >> > this functional execution procedurally? Help me, please. > > >> > Thanks. > > >> -- > >> A + Thierry Volpiatto > >> Location: Saint-Cyr-Sur-Mer - France > > -- > A + Thierry Volpiatto > Location: Saint-Cyr-Sur-Mer - France ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: How to defun body in procedural manner [not found] ` <mailman.5523.1239973116.31690.help-gnu-emacs@gnu.org> 2009-04-18 6:58 ` Kiwon Um @ 2009-04-20 7:44 ` Kiwon Um 2009-04-20 10:43 ` thierry.volpiatto [not found] ` <mailman.5725.1240224622.31690.help-gnu-emacs@gnu.org> 1 sibling, 2 replies; 13+ messages in thread From: Kiwon Um @ 2009-04-20 7:44 UTC (permalink / raw) To: help-gnu-emacs On Apr 17, 9:51 pm, thierry.volpia...@gmail.com wrote: > Kiwon Um <um.ki...@gmail.com> writes: > > On Apr 17, 2:52 pm, thierry.volpia...@gmail.com wrote: > >> Hi, i don't use cvs, but you should have a look at what return: > >> `cvs-sentinel'. > >> and: > >> (when (cvs-sentinel ==> return_what_you_want) > >> (shell-command "your_command")) > > > I've tried to understand what the cvs-sentinel function does, but I > > didn't. Would you write a concrete example code for me, please? > > Yes, as i told you i am not a cvs user, so... > it seem cvs-sentinel return only a message :-( > So try that, i just write it and it worked to update emacs-w3m and compile > it: > > (defun update-cvs-dir-and-compile () > (interactive) > (let ((dir default-directory)) > (cvs-update dir nil) > (while (not (equal cvs-mode-line-process "exit")) > (sit-for 1)) > (shell-command "make"))) > > Modify for your need (make args ...etc..) > Then, how can I check the end of the compile process as similar manner as above? I tried (compile-mode-line-process "exit"), but it didn't work. And I tried as follows: (while (not (equal (process-status "compilation") 'exit)) (sit-for 1)) This didn't work, either. Any advice? > > > >> Kiwon Um <um.ki...@gmail.com> writes: > >> > Hello. I wrote a function as follows: > > >> > (defun my-update-package (path) > >> > "Update the package in path from CVS" > >> > (cvs-update path nil) > >> > (shell-command (concat "touch `find " path " -name Makefile`")) > >> > (compile (concat "make -C " path))) > > >> > When the function is called, it seems to execute the shell-command and > >> > compile lines before the finishing cvs-update line. How can I make > >> > this functional execution procedurally? Help me, please. > > >> > Thanks. > > >> -- > >> A + Thierry Volpiatto > >> Location: Saint-Cyr-Sur-Mer - France > > -- > A + Thierry Volpiatto > Location: Saint-Cyr-Sur-Mer - France ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: How to defun body in procedural manner 2009-04-20 7:44 ` Kiwon Um @ 2009-04-20 10:43 ` thierry.volpiatto 2009-04-21 0:57 ` Kevin Rodgers [not found] ` <mailman.5725.1240224622.31690.help-gnu-emacs@gnu.org> 1 sibling, 1 reply; 13+ messages in thread From: thierry.volpiatto @ 2009-04-20 10:43 UTC (permalink / raw) To: help-gnu-emacs Hi Kiwon, Kiwon Um <um.kiwon@gmail.com> writes: > On Apr 17, 9:51 pm, thierry.volpia...@gmail.com wrote: >> Kiwon Um <um.ki...@gmail.com> writes: >> > On Apr 17, 2:52 pm, thierry.volpia...@gmail.com wrote: >> >> Hi, i don't use cvs, but you should have a look at what return: >> >> `cvs-sentinel'. >> >> and: >> >> (when (cvs-sentinel ==> return_what_you_want) >> >> (shell-command "your_command")) >> >> > I've tried to understand what the cvs-sentinel function does, but I >> > didn't. Would you write a concrete example code for me, please? >> >> Yes, as i told you i am not a cvs user, so... >> it seem cvs-sentinel return only a message :-( >> So try that, i just write it and it worked to update emacs-w3m and compile >> it: >> >> (defun update-cvs-dir-and-compile () >> (interactive) >> (let ((dir default-directory)) >> (cvs-update dir nil) >> (while (not (equal cvs-mode-line-process "exit")) >> (sit-for 1)) >> (shell-command "make"))) >> >> Modify for your need (make args ...etc..) >> > > Then, how can I check the end of the compile process as similar manner > as above? I tried (compile-mode-line-process "exit"), but it didn't > work. And I tried as follows: > (while (not (equal (process-status "compilation") 'exit)) (sit-for > 1)) > This didn't work, either. > Any advice? `shell-command' is a synchronous process, so you have just to wait it finish.May be just add a message to tell you that the compile process is started: (defun update-cvs-dir-and-compile () "Cvs update current dir and compile it." (interactive) (let ((dir default-directory)) (cvs-update dir nil) (while (not (equal cvs-mode-line-process "exit")) (sit-for 1)) (message "Wait compiling %s..." dir) (shell-command "make"))) But if you want to run the compile process asynchronous, you have to use `start-process' instead of `shell-command' and set a sentinel on this process like this: (progn (start-process "my-compil" nil "sleep" "12") (set-process-sentinel (get-process "my-compil") #'(lambda (process event) (message "Process:%s State:%s" process event)))) Replace "sleep" with "make" and "12" with make args ;-) NOTE:If you have more than one arg to the make command, it's may be convenient to use apply on start-process. >> >> Kiwon Um <um.ki...@gmail.com> writes: >> >> > Hello. I wrote a function as follows: >> >> >> > (defun my-update-package (path) >> >> > "Update the package in path from CVS" >> >> > (cvs-update path nil) >> >> > (shell-command (concat "touch `find " path " -name Makefile`")) >> >> > (compile (concat "make -C " path))) >> >> >> > When the function is called, it seems to execute the shell-command and >> >> > compile lines before the finishing cvs-update line. How can I make >> >> > this functional execution procedurally? Help me, please. >> >> >> > Thanks. >> >> >> -- >> >> A + Thierry Volpiatto >> >> Location: Saint-Cyr-Sur-Mer - France >> >> -- >> A + Thierry Volpiatto >> Location: Saint-Cyr-Sur-Mer - France > > -- A + Thierry Volpiatto Location: Saint-Cyr-Sur-Mer - France ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: How to defun body in procedural manner 2009-04-20 10:43 ` thierry.volpiatto @ 2009-04-21 0:57 ` Kevin Rodgers 0 siblings, 0 replies; 13+ messages in thread From: Kevin Rodgers @ 2009-04-21 0:57 UTC (permalink / raw) To: help-gnu-emacs thierry.volpiatto@gmail.com wrote: > `shell-command' is a synchronous process, so you have just to wait it > finish.May be just add a message to tell you that the compile process is > started: > > (defun update-cvs-dir-and-compile () > "Cvs update current dir and compile it." > (interactive) > (let ((dir default-directory)) > (cvs-update dir nil) > (while (not (equal cvs-mode-line-process "exit")) > (sit-for 1)) > (message "Wait compiling %s..." dir) > (shell-command "make"))) > > But if you want to run the compile process asynchronous, > you have to use `start-process' instead of `shell-command' and set a > sentinel on this process like this: > > (progn > (start-process "my-compil" nil "sleep" > "12") > (set-process-sentinel (get-process "my-compil") > #'(lambda (process event) > (message "Process:%s State:%s" process event)))) > > Replace "sleep" with "make" and "12" with make args ;-) > > NOTE:If you have more than one arg to the make command, it's may be > convenient to use apply on start-process. If you want be able to run more than 1 process (after all, it is asynchronous): (let ((this-process (start-process "my-compil" nil "sleep" "12"))) (set-process-sentinel this-process #'(lambda (process event) (message "Process:%s State:%s" process event)))) -- Kevin Rodgers Denver, Colorado, USA ^ permalink raw reply [flat|nested] 13+ messages in thread
[parent not found: <mailman.5725.1240224622.31690.help-gnu-emacs@gnu.org>]
* Re: How to defun body in procedural manner [not found] ` <mailman.5725.1240224622.31690.help-gnu-emacs@gnu.org> @ 2009-04-20 13:28 ` Kiwon Um 2009-04-20 14:18 ` thierry.volpiatto [not found] ` <mailman.5730.1240237545.31690.help-gnu-emacs@gnu.org> 0 siblings, 2 replies; 13+ messages in thread From: Kiwon Um @ 2009-04-20 13:28 UTC (permalink / raw) To: help-gnu-emacs On Apr 20, 7:43 pm, thierry.volpia...@gmail.com wrote: > Hi Kiwon, > > > > Kiwon Um <um.ki...@gmail.com> writes: > > On Apr 17, 9:51 pm, thierry.volpia...@gmail.com wrote: > >> Kiwon Um <um.ki...@gmail.com> writes: > >> > On Apr 17, 2:52 pm, thierry.volpia...@gmail.com wrote: > >> >> Hi, i don't use cvs, but you should have a look at what return: > >> >> `cvs-sentinel'. > >> >> and: > >> >> (when (cvs-sentinel ==> return_what_you_want) > >> >> (shell-command "your_command")) > > >> > I've tried to understand what the cvs-sentinel function does, but I > >> > didn't. Would you write a concrete example code for me, please? > > >> Yes, as i told you i am not a cvs user, so... > >> it seem cvs-sentinel return only a message :-( > >> So try that, i just write it and it worked to update emacs-w3m and compile > >> it: > > >> (defun update-cvs-dir-and-compile () > >> (interactive) > >> (let ((dir default-directory)) > >> (cvs-update dir nil) > >> (while (not (equal cvs-mode-line-process "exit")) > >> (sit-for 1)) > >> (shell-command "make"))) > > >> Modify for your need (make args ...etc..) > > > Then, how can I check the end of the compile process as similar manner > > as above? I tried (compile-mode-line-process "exit"), but it didn't > > work. And I tried as follows: > > (while (not (equal (process-status "compilation") 'exit)) (sit-for > > 1)) > > This didn't work, either. > > Any advice? > > `shell-command' is a synchronous process, so you have just to wait it > finish.May be just add a message to tell you that the compile process is > started: > Ah! I missed my point. Actually, I've changed shell-command to compile so that (compile "make -C ...some_path") not (shell-command ...). The function 'compile' doesn't seem to be synchronous, huh? So I'm wondering how to check it. Thanks for your kind replies :) > (defun update-cvs-dir-and-compile () > "Cvs update current dir and compile it." > (interactive) > (let ((dir default-directory)) > (cvs-update dir nil) > (while (not (equal cvs-mode-line-process "exit")) > (sit-for 1)) > (message "Wait compiling %s..." dir) > (shell-command "make"))) > > But if you want to run the compile process asynchronous, > you have to use `start-process' instead of `shell-command' and set a > sentinel on this process like this: > > (progn > (start-process "my-compil" nil "sleep" > "12") > (set-process-sentinel (get-process "my-compil") > #'(lambda (process event) > (message "Process:%s State:%s" process event)))) > > Replace "sleep" with "make" and "12" with make args ;-) > > NOTE:If you have more than one arg to the make command, it's may be > convenient to use apply on start-process. > > > > >> >> Kiwon Um <um.ki...@gmail.com> writes: > >> >> > Hello. I wrote a function as follows: > > >> >> > (defun my-update-package (path) > >> >> > "Update the package in path from CVS" > >> >> > (cvs-update path nil) > >> >> > (shell-command (concat "touch `find " path " -name Makefile`")) > >> >> > (compile (concat "make -C " path))) > > >> >> > When the function is called, it seems to execute the shell-command and > >> >> > compile lines before the finishing cvs-update line. How can I make > >> >> > this functional execution procedurally? Help me, please. > > >> >> > Thanks. > > >> >> -- > >> >> A + Thierry Volpiatto > >> >> Location: Saint-Cyr-Sur-Mer - France > > >> -- > >> A + Thierry Volpiatto > >> Location: Saint-Cyr-Sur-Mer - France > > -- > A + Thierry Volpiatto > Location: Saint-Cyr-Sur-Mer - France ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: How to defun body in procedural manner 2009-04-20 13:28 ` Kiwon Um @ 2009-04-20 14:18 ` thierry.volpiatto [not found] ` <mailman.5730.1240237545.31690.help-gnu-emacs@gnu.org> 1 sibling, 0 replies; 13+ messages in thread From: thierry.volpiatto @ 2009-04-20 14:18 UTC (permalink / raw) To: help-gnu-emacs Kiwon Um <um.kiwon@gmail.com> writes: > On Apr 20, 7:43 pm, thierry.volpia...@gmail.com wrote: >> Hi Kiwon, >> >> >> >> Kiwon Um <um.ki...@gmail.com> writes: >> > On Apr 17, 9:51 pm, thierry.volpia...@gmail.com wrote: >> >> Kiwon Um <um.ki...@gmail.com> writes: >> >> > On Apr 17, 2:52 pm, thierry.volpia...@gmail.com wrote: >> >> >> Hi, i don't use cvs, but you should have a look at what return: >> >> >> `cvs-sentinel'. >> >> >> and: >> >> >> (when (cvs-sentinel ==> return_what_you_want) >> >> >> (shell-command "your_command")) >> >> >> > I've tried to understand what the cvs-sentinel function does, but I >> >> > didn't. Would you write a concrete example code for me, please? >> >> >> Yes, as i told you i am not a cvs user, so... >> >> it seem cvs-sentinel return only a message :-( >> >> So try that, i just write it and it worked to update emacs-w3m and compile >> >> it: >> >> >> (defun update-cvs-dir-and-compile () >> >> (interactive) >> >> (let ((dir default-directory)) >> >> (cvs-update dir nil) >> >> (while (not (equal cvs-mode-line-process "exit")) >> >> (sit-for 1)) >> >> (shell-command "make"))) >> >> >> Modify for your need (make args ...etc..) >> >> > Then, how can I check the end of the compile process as similar manner >> > as above? I tried (compile-mode-line-process "exit"), but it didn't >> > work. And I tried as follows: >> > (while (not (equal (process-status "compilation") 'exit)) (sit-for >> > 1)) >> > This didn't work, either. >> > Any advice? >> >> `shell-command' is a synchronous process, so you have just to wait it >> finish.May be just add a message to tell you that the compile process is >> started: >> > > Ah! I missed my point. Actually, I've changed shell-command to compile > so that > (compile "make -C ...some_path") not (shell-command ...). > The function 'compile' doesn't seem to be synchronous, huh? So I'm > wondering how to check it. compile is asynchronous, and it will warn you when finish. Have a look at C-h f compile RET. Unless you have to run another command after the compile process, there is no need to catch the end of the process, just wait it warn you in the mode-line or the compile buffer. > Thanks for your kind replies :) > >> (defun update-cvs-dir-and-compile () >> "Cvs update current dir and compile it." >> (interactive) >> (let ((dir default-directory)) >> (cvs-update dir nil) >> (while (not (equal cvs-mode-line-process "exit")) >> (sit-for 1)) >> (message "Wait compiling %s..." dir) >> (shell-command "make"))) >> >> But if you want to run the compile process asynchronous, >> you have to use `start-process' instead of `shell-command' and set a >> sentinel on this process like this: >> >> (progn >> (start-process "my-compil" nil "sleep" >> "12") >> (set-process-sentinel (get-process "my-compil") >> #'(lambda (process event) >> (message "Process:%s State:%s" process event)))) >> >> Replace "sleep" with "make" and "12" with make args ;-) >> >> NOTE:If you have more than one arg to the make command, it's may be >> convenient to use apply on start-process. >> >> >> >> >> >> Kiwon Um <um.ki...@gmail.com> writes: >> >> >> > Hello. I wrote a function as follows: >> >> >> >> > (defun my-update-package (path) >> >> >> > "Update the package in path from CVS" >> >> >> > (cvs-update path nil) >> >> >> > (shell-command (concat "touch `find " path " -name Makefile`")) >> >> >> > (compile (concat "make -C " path))) >> >> >> >> > When the function is called, it seems to execute the shell-command and >> >> >> > compile lines before the finishing cvs-update line. How can I make >> >> >> > this functional execution procedurally? Help me, please. >> >> >> >> > Thanks. >> >> >> >> -- >> >> >> A + Thierry Volpiatto >> >> >> Location: Saint-Cyr-Sur-Mer - France >> >> >> -- >> >> A + Thierry Volpiatto >> >> Location: Saint-Cyr-Sur-Mer - France >> >> -- >> A + Thierry Volpiatto >> Location: Saint-Cyr-Sur-Mer - France > > -- A + Thierry Volpiatto Location: Saint-Cyr-Sur-Mer - France ^ permalink raw reply [flat|nested] 13+ messages in thread
[parent not found: <mailman.5730.1240237545.31690.help-gnu-emacs@gnu.org>]
* Re: How to defun body in procedural manner [not found] ` <mailman.5730.1240237545.31690.help-gnu-emacs@gnu.org> @ 2009-04-21 1:46 ` Kiwon Um 0 siblings, 0 replies; 13+ messages in thread From: Kiwon Um @ 2009-04-21 1:46 UTC (permalink / raw) To: help-gnu-emacs On Apr 20, 11:18 pm, thierry.volpia...@gmail.com wrote: > Kiwon Um <um.ki...@gmail.com> writes: > > On Apr 20, 7:43 pm, thierry.volpia...@gmail.com wrote: > >> Hi Kiwon, > > >> Kiwon Um <um.ki...@gmail.com> writes: > >> > On Apr 17, 9:51 pm, thierry.volpia...@gmail.com wrote: > >> >> Kiwon Um <um.ki...@gmail.com> writes: > >> >> > On Apr 17, 2:52 pm, thierry.volpia...@gmail.com wrote: > >> >> >> Hi, i don't use cvs, but you should have a look at what return: > >> >> >> `cvs-sentinel'. > >> >> >> and: > >> >> >> (when (cvs-sentinel ==> return_what_you_want) > >> >> >> (shell-command "your_command")) > > >> >> > I've tried to understand what the cvs-sentinel function does, but I > >> >> > didn't. Would you write a concrete example code for me, please? > > >> >> Yes, as i told you i am not a cvs user, so... > >> >> it seem cvs-sentinel return only a message :-( > >> >> So try that, i just write it and it worked to update emacs-w3m and compile > >> >> it: > > >> >> (defun update-cvs-dir-and-compile () > >> >> (interactive) > >> >> (let ((dir default-directory)) > >> >> (cvs-update dir nil) > >> >> (while (not (equal cvs-mode-line-process "exit")) > >> >> (sit-for 1)) > >> >> (shell-command "make"))) > > >> >> Modify for your need (make args ...etc..) > > >> > Then, how can I check the end of the compile process as similar manner > >> > as above? I tried (compile-mode-line-process "exit"), but it didn't > >> > work. And I tried as follows: > >> > (while (not (equal (process-status "compilation") 'exit)) (sit-for > >> > 1)) > >> > This didn't work, either. > >> > Any advice? > > >> `shell-command' is a synchronous process, so you have just to wait it > >> finish.May be just add a message to tell you that the compile process is > >> started: > > > Ah! I missed my point. Actually, I've changed shell-command to compile > > so that > > (compile "make -C ...some_path") not (shell-command ...). > > The function 'compile' doesn't seem to be synchronous, huh? So I'm > > wondering how to check it. > > compile is asynchronous, and it will warn you when finish. > Have a look at C-h f compile RET. > > Unless you have to run another command after the compile process, there > is no need to catch the end of the process, just wait it warn you in the > mode-line or the compile buffer. > That's my case. The compile command is for clear-all things, so the next processes must check it. Actually, shell-command is fine to do it. I just wondered how to generally check the status of an asynchronous function process. Always thanks for your advice. :) > > > > Thanks for your kind replies :) > > >> (defun update-cvs-dir-and-compile () > >> "Cvs update current dir and compile it." > >> (interactive) > >> (let ((dir default-directory)) > >> (cvs-update dir nil) > >> (while (not (equal cvs-mode-line-process "exit")) > >> (sit-for 1)) > >> (message "Wait compiling %s..." dir) > >> (shell-command "make"))) > > >> But if you want to run the compile process asynchronous, > >> you have to use `start-process' instead of `shell-command' and set a > >> sentinel on this process like this: > > >> (progn > >> (start-process "my-compil" nil "sleep" > >> "12") > >> (set-process-sentinel (get-process "my-compil") > >> #'(lambda (process event) > >> (message "Process:%s State:%s" process event)))) > > >> Replace "sleep" with "make" and "12" with make args ;-) > > >> NOTE:If you have more than one arg to the make command, it's may be > >> convenient to use apply on start-process. > > >> >> >> Kiwon Um <um.ki...@gmail.com> writes: > >> >> >> > Hello. I wrote a function as follows: > > >> >> >> > (defun my-update-package (path) > >> >> >> > "Update the package in path from CVS" > >> >> >> > (cvs-update path nil) > >> >> >> > (shell-command (concat "touch `find " path " -name Makefile`")) > >> >> >> > (compile (concat "make -C " path))) > > >> >> >> > When the function is called, it seems to execute the shell-command and > >> >> >> > compile lines before the finishing cvs-update line. How can I make > >> >> >> > this functional execution procedurally? Help me, please. > > >> >> >> > Thanks. > > >> >> >> -- > >> >> >> A + Thierry Volpiatto > >> >> >> Location: Saint-Cyr-Sur-Mer - France > > >> >> -- > >> >> A + Thierry Volpiatto > >> >> Location: Saint-Cyr-Sur-Mer - France > > >> -- > >> A + Thierry Volpiatto > >> Location: Saint-Cyr-Sur-Mer - France > > -- > A + Thierry Volpiatto > Location: Saint-Cyr-Sur-Mer - France ^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2009-04-21 1:46 UTC | newest] Thread overview: 13+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2009-04-17 1:28 How to defun body in procedural manner Kiwon Um 2009-04-17 4:37 ` Barry Margolin 2009-04-17 5:29 ` Kiwon Um 2009-04-17 5:52 ` thierry.volpiatto [not found] ` <mailman.5512.1239947972.31690.help-gnu-emacs@gnu.org> 2009-04-17 9:52 ` Kiwon Um 2009-04-17 12:51 ` thierry.volpiatto [not found] ` <mailman.5523.1239973116.31690.help-gnu-emacs@gnu.org> 2009-04-18 6:58 ` Kiwon Um 2009-04-20 7:44 ` Kiwon Um 2009-04-20 10:43 ` thierry.volpiatto 2009-04-21 0:57 ` Kevin Rodgers [not found] ` <mailman.5725.1240224622.31690.help-gnu-emacs@gnu.org> 2009-04-20 13:28 ` Kiwon Um 2009-04-20 14:18 ` thierry.volpiatto [not found] ` <mailman.5730.1240237545.31690.help-gnu-emacs@gnu.org> 2009-04-21 1:46 ` Kiwon Um
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).