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

pukiwiki on Emacs-w3m



はじめまして. Emacs-w3m を使いはじめて1週間です. 
pukiwiki の編集に便利に, というか, 2行以上の日本語入力には Emacs が
なくてはならないので必然的に使いはじめました. 

全体的にすばらしい出来ですが, pukiwiki との間で少し問題があるので, 相
談します. 長いメールになってしまってすみません. pukiwiki も w3m 自体
も使いはじめて1週間なのですが. . .

環境は, 次のとおりです. 

server
  FreeBSD 4.9, apache 1.3.27, php4 4.3.4, pukiwiki 1.4.2

cilent
  FreeBSD 4.9, emcws-21.3 (Emacs21.3 に Canna patch のあたったもの)
  w3m-emacs21.1.3.80, w3m-img 0.4.1

================================================================
● pukiwiki 編集と更新の衝突:

pukiwiki 編集は, [編集] ボタンをおすと編集画面を GET してきて, 
フォームを編集して, [更新] ボタンで POST します. 同じページを
再び編集して, [更新] すると, pukiwiki に「更新の衝突」が発生したと
怒られます. 
  2度目の編集が, Emacs-w3m のバッファ上のキャッシュを読んで, 
server 側に get しないので古い内容に対して編集したと pukiwiki に
みなされるせいです. 編集画面の HTTP Header には

Cache-control: no-cache
Pragma: no-cache 

がありますが, Emacs-w3m でキャッシュしてしまうようです. 
変数 w3m-cache-articles に ID が格納されていました. 

いまは dirty hack でしのいでいますが, もっとスマートな方法があったら
教えてください. 

================================================================
*** w3m.el.org	Sat Jan 17 09:37:19 2004
--- w3m.el	Sat Jan 17 09:40:03 2004
***************
*** 4044,4046 ****
  	  (when (search-forward "\n\n" nil t)
! 	    (let ((header (buffer-substring (point-min) (point))))
  	      (w3m-cache-header url header)
--- 4044,4049 ----
  	  (when (search-forward "\n\n" nil t)
! 	    (let* ((header (buffer-substring (point-min) (point)))
! 		   ;; disable cache if specified. amagai@nue.org 2004.1.16
! 		   (docache (null (or (string-match "^Cache-control: no-cache" header)
! 				      (string-match "^Pragma: no-cache" header) ))))
  	      (w3m-cache-header url header)
***************
*** 4049,4051 ****
  	      (delete-region (point-min) (point))
! 	      (w3m-cache-contents url (current-buffer))
  	      (w3m-w3m-parse-header url header))))))))
--- 4052,4055 ----
  	      (delete-region (point-min) (point))
! 	      (if docache
! 		  (w3m-cache-contents url (current-buffer)) )
  	      (w3m-w3m-parse-header url header))))))))
================================================================
● 添付ファイルのアップロード:

pukiwiki のファイルのアップロード機能が Emacs-w3m からうまく使えません. 
w3m 自体を使うとうまくいくので, ethereal で packet dump してみました. 

1つ気になる点は, POST の Content-length: の数字より実際に送られる
データの量が 2 octet 大きいことです. データの最後に \r\n が余計に
ついています. Content-length: の値で処理してもらえれば問題ないし, 
これが原因かどうか不明なのですが, 気になりました. 

最初のパケット
Hypertext Transfer Protocol
    POST /pukiwiki/pukiwiki.php HTTP/1.0\r\n
    User-Agent: Emacs-w3m/1.3.80 w3m/0.4.1\r\n
    Accept: text/*, image/*\r\n
    Accept-Encoding: gzip, compress, bzip, bzip2, deflate\r\n
    Accept-Language: ja en\r\n
    Host: m.n.org\r\n
    Content-length: 1605\r\n
    Content-Type: multipart/form-data; boundary=--_16393_63206_374643\r\n
    Referer: http://m.n.org/pukiwiki/pukiwiki.php?plugin=attach&pcmd=upload&page=w3m%A4%CE%A5%E1%A5%E2\r\n
    \r\n
    Data (960 bytes)

次のパケット (続きパケット)
Hypertext Transfer Protocol
    Data (647 bytes)

0260  29 29 29 29 29 29 29 0a 0d 0a 2d 2d 2d 2d 5f 31   )))))))...----_1
0270  36 33 39 33 5f 36 33 32 30 36 5f 33 37 34 36 34   6393_63206_37464
0280  33 2d 2d 0d 0a 0d 0a                              3--....
================================================================

こちらの使いかたが変なようであれば教えてください. 
ソースを追いかけきれていないもので. お願いばかりですみません. 

天海良治