X-Git-Url: http://cgit.sxemacs.org/?a=blobdiff_plain;f=lisp%2Friece-ruby.el;h=46d6a74dcffcdc2387290832068147d02a631f21;hb=07aa19593bbaaa64fc69dc634cc7e6dc50f52684;hp=f8f4f35b6a7c407926e5e6d794676be7e9e51023;hpb=6e89d92a59407c03625a6d07d9ec4a486c35a7b8;p=riece diff --git a/lisp/riece-ruby.el b/lisp/riece-ruby.el index f8f4f35..46d6a74 100644 --- a/lisp/riece-ruby.el +++ b/lisp/riece-ruby.el @@ -211,9 +211,10 @@ Use `riece-ruby-set-property' to set this variable.") (let ((entry (assoc name riece-ruby-exit-handler-alist))) (if entry (progn - (funcall (cdr entry) (car entry)) (setq riece-ruby-exit-handler-alist - (delq entry riece-ruby-exit-handler-alist)))))) + (delq entry riece-ruby-exit-handler-alist)) + (funcall (cdr entry) (car entry)) + (riece-ruby-clear name))))) (defun riece-ruby-sentinel (process status) (kill-buffer (process-buffer process))) @@ -234,6 +235,7 @@ Use `riece-ruby-set-property' to set this variable.") (file-name-directory (locate-library (symbol-file 'riece-ruby-execute))))))) + (process-kill-without-query riece-ruby-process) (set-process-filter riece-ruby-process #'riece-ruby-filter) (set-process-sentinel riece-ruby-process #'riece-ruby-sentinel))) (save-excursion @@ -265,28 +267,42 @@ Use `riece-ruby-set-property' to set this variable.") (save-excursion (set-buffer (process-buffer riece-ruby-process)) (riece-ruby-reset-process-buffer) - (riece-ruby-send-exit name)) + (make-local-variable 'riece-ruby-lock) + (setq riece-ruby-lock t) + (riece-ruby-send-exit name) + (while riece-ruby-lock + (accept-process-output riece-ruby-process))) (let ((entry (assoc name riece-ruby-property-alist))) (if entry (delq entry riece-ruby-property-alist)))) (defun riece-ruby-set-exit-handler (name handler) (let ((entry (assoc name riece-ruby-exit-handler-alist))) - (if entry - (setcdr entry handler) - (setq riece-ruby-exit-handler-alist - (cons (cons name handler) - riece-ruby-exit-handler-alist))) - ;;check if the program already exited - (riece-ruby-inspect name))) + (if handler + (progn + (if entry + (setcdr entry handler) + (setq riece-ruby-exit-handler-alist + (cons (cons name handler) + riece-ruby-exit-handler-alist))) + ;;check if the program already exited + (riece-ruby-inspect name)) + (if entry + (setq riece-ruby-exit-handler-alist + (delq entry riece-ruby-exit-handler-alist)))))) (defun riece-ruby-set-output-handler (name handler) (let ((entry (assoc name riece-ruby-output-handler-alist))) - (if entry - (setcdr entry handler) - (setq riece-ruby-output-handler-alist - (cons (cons name handler) - riece-ruby-output-handler-alist))))) + (if handler + (progn + (if entry + (setcdr entry handler) + (setq riece-ruby-output-handler-alist + (cons (cons name handler) + riece-ruby-output-handler-alist)))) + (if entry + (setq riece-ruby-output-handler-alist + (delq entry riece-ruby-output-handler-alist)))))) (defun riece-ruby-set-property (name property value) (let ((entry (assoc name riece-ruby-property-alist))