help-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: How to defun body in procedural manner


From: Kiwon Um
Subject: Re: How to defun body in procedural manner
Date: Mon, 20 Apr 2009 18:46:02 -0700 (PDT)
User-agent: G2/1.0

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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]