unofficial mirror of help-gnu-emacs@gnu.org
 help / color / mirror / Atom feed
* Waiting on compilation to finish before executing another function
@ 2013-08-15 17:36 Rami A
  2013-08-15 17:48 ` Dan Espen
                   ` (2 more replies)
  0 siblings, 3 replies; 13+ messages in thread
From: Rami A @ 2013-08-15 17:36 UTC (permalink / raw)
  To: help-gnu-emacs

Greetings, 

I am using compile to pulling new files from source tree using mercurial "hg pull".
I am performing a save of all buffers before the pull and would like to "refresh all opened buffers" after the compilation "pulling" finishes.
I tried experimenting with compilation-finish-functions but found out that the functions added to the list will be executed after "every" compilation. Since I use compile to search IDs "gid" I don't want to refresh opened files on every search.
How can I wait on compilation to finish before refreshing opened files "only" while inside a command and not on every compile outside of the command.
Here is the code:

; From http://www.emacswiki.org/emacs/CompileCommand
(defun compile-pkg (&optional command startdir)
  "Compile a package, moving up to the parent directory
  containing configure.ac, if it exists. Start in startdir if defined,
  else start in the current directory."
  (interactive)
  (let ((dirname) (dir-buffer nil))
    (setq startdir (expand-file-name (if startdir startdir ".")))
    (setq command  (if command command compile-command))
    (setq dirname (upward-find-file "Makefile" startdir)) 
;    (setq dirname (if dirname dirname (upward-find-file "Makefile" startdir)))
;    (setq dirname (if dirname dirname (expand-file-name ".")))
    ; We've now worked out where to start. Now we need to worry about
    ; calling compile in the right directory
    (save-excursion
      (setq dir-buffer (find-file-noselect dirname))
      (set-buffer dir-buffer)
      (compile command)
      (kill-buffer dir-buffer)
      )))

(defun upward-find-file (filename &optional startdir)
  "Move up directories until we find a certain filename. If we
  manage to find it, return the containing directory. Else if we
  get to the toplevel directory and still can't find it, return
  nil. Start at startdir or . if startdir not given"
  (let ((dirname (expand-file-name
		  (if startdir startdir ".")))
	(found nil) ; found is set as a flag to leave loop if we find it
	(top nil))  ; top is set when we get
		    ; to / so that we only check it once
    ; While we've neither been at the top last time nor have we found
    ; the file.
    (while (not (or found top))
      ; If we're at / set top flag.
      (if (string= (expand-file-name dirname) "/")
	  (setq top t))
      ; Check for the file
      (if (file-exists-p (expand-file-name filename dirname))
	  (setq found t)
	; If not, move up a directory
	(setq dirname (expand-file-name ".." dirname))))
    ; return statement
    (if found (concat dirname "/") nil)))

(defun compile-hgpull ()
  (interactive)
  (save-all-buffers)
  (compile-pkg "/import/ftap-rust1/tools/bin/hg pull -u")
; if (compile finished) -> (revert-all-buffers)
  )

(global-set-key [f1]    'compile-hgpull)


^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2013-08-16  1:43 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-08-15 17:36 Waiting on compilation to finish before executing another function Rami A
2013-08-15 17:48 ` Dan Espen
2013-08-15 17:53   ` Rami A
2013-08-15 18:04     ` Dan Espen
2013-08-15 18:11       ` Rami A
2013-08-15 18:41     ` Eli Zaretskii
     [not found]     ` <mailman.103.1376592065.10748.help-gnu-emacs@gnu.org>
2013-08-15 18:53       ` Rami A
2013-08-16  1:43         ` Stefan Monnier
2013-08-15 21:14 ` Thien-Thi Nguyen
     [not found] ` <mailman.113.1376601089.10748.help-gnu-emacs@gnu.org>
2013-08-15 21:46   ` Rami A
2013-08-15 22:41     ` Rami A
2013-08-15 23:03       ` Rami A
2013-08-15 23:11       ` Óscar Fuentes

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).