[mew-dist 20791] Re: Retrieving

Hideyuki SHIRAI ( 白井秀行 ) shirai at example.com
2002年 4月 19日 (金) 12:34:00 JST


From: b-fish at example.com さん曰く
Subject: [mew-dist 20788] Re: Retrieving
Message-ID: <20020418.225605.01365997.b-fish at example.com>
Date: Thu, 18 Apr 2002 22:56:05 +0900 (LMT)

>   こちらは
>   mew-pop-info-b-fish at example.com closed 256 *Mew* .....
>   となっていました。

>   こちらは
>   <QUIT>
>   +OK Pop server at xxx.xxx.or.jp signig off.
>   で、終わっています。

やっぱり sentinel が上がってきていませんね。

そういえば、emacs-w3m 方面でも Mac OS X の人が、w3m の
start-process の sentinel が上がってこない、といわれていたので、
まだまだこれからなのでしょう、Emacs on Mac OS X。

> > sentinel が上がってこないと、Mew (というか elisp) からはどうしよ
> > うもないでしょう。
> 
>   ということで、Mew ではどうしようもない状態なのでしょうね ;_;

ということは、メールを送った後の smtp も 'closed で残っていたり
しますか?

>   # ようやく、Win の呪縛から逃れられそうなので、何とかしたいので
>     す .....

# う〜む

とってもアドホック、かつ、動くかどうか全然わからないのですが、
以下のコードを ~/.mew.el に仕込んでおくと、予想では (^^;) 3秒に
一回 process をチェックして、Mew が open-network-stream で作った
process が 'closed になっていたら、それぞれの sentinel のコード
を無理やり動かすようになると思います。

(defvar mew-force-delete-network-timer nil)

(unless mew-force-delete-network-timer
  (setq mew-force-delete-network-timer
	(run-at-time 10 3 'mew-force-delete-network)))

;; (cancel-timer mew-force-delete-network-timer)

(defun mew-force-delete-network ()
  (let ((procs (process-list))
	(event "[[FORCE DELETE]]")
	proc type func)
    (while (setq proc (car procs))
      (when (and (string-match "^mew-\\(.+\\)-info-" (process-name proc))
		 (setq type (match-string 1 (process-name proc)))
		 (eq 'closed (process-status proc)))
	(setq func (intern-soft (concat "mew-" type "-sentinel")))
	(when (fboundp func)
	  (funcall func proc event)))
      (setq procs (cdr procs)))))

*Mew debug* に 

<POP SENTINEL>
[[FORCE DELETE]]

と出たら成功です。

# ま、真っ当に動いたらラッキーということで ^^;;;

-- 
白井秀行 (mailto:shirai at example.com)
-------------- next part --------------
おまけなのですが、こういうのもだめなんでしょうか?
<<SENTINEL>> が *TEST* buffer に入るかどうかです。

;; 直接 http server と話せる場合はこちら。

(let ((server "www.mew.org")
      (port 80)
      (url "index.html")
      (buf (get-buffer-create "*TEST*"))
      process)
  (pop-to-buffer buf)
  (erase-buffer)
  (setq process (open-network-stream "TEST" buf server port))
  (set-process-coding-system process 'undecided 'raw-text)
  (set-process-sentinel process
			(lambda (proc event)
			  (set-buffer (process-buffer proc))
			  (goto-char (point-max))
			  (insert "<<SENTINEL>>\n")))
  (process-send-string process (format "GET %s\n" url)))


;; proxy 通さないとだめな場合はこちら。
(let ((proxy-server "proxy.foo.bar") ;; proxy server の設定
      (proxy-port 8080) ;; proxy port の設定
      (url "http://www.mew.org/index.html")
      (buf (get-buffer-create "*TEST*"))
      process)
  (pop-to-buffer buf)
  (erase-buffer)
  (setq process (open-network-stream "TEST" buf proxy-server proxy-port))
  (set-process-coding-system process 'undecided 'raw-text)
  (set-process-sentinel process
			(lambda (proc event)
			  (set-buffer (process-buffer proc))
			  (goto-char (point-max))
			  (insert "<<SENTINEL>>\n")))
  (process-send-string process (format "GET %s HTTP/1.0\n\n" url)))


Mew-dist メーリングリストの案内