2ch閲覧プラグイン〜Chalice for Vim

このエントリーをはてなブックマークに追加
740名無しさん@お腹いっぱい。
書込のログを取るパッチです。
cookieなどの理由で書込に失敗した時に、書込内容を復元するのが目的ですが、
拡張すれば他にも使い道が出て来るかなあとちょっと期待。

--- doc/chalice.txt.cp932 4 May 2002 19:45:52
+++ doc/chalice.txt.cp932 9 May 2002 05:23:02
@@ -347,6 +347,12 @@
  let chalice_bookmark = $HOME . '/.chalice_bmk'
 < (解説)ブックマークファイルを指定する。
 
+- chalice_logfile string (省略値 "")
+ ログファイルを指定する。指定しなかった場合はChaliceにより自動的に決定
+ される。 >
+ let chalice_logfile = $HOME . '/.chalice_log'
+< (解説)ログファイルを指定する。
+
 - chalice_cachedir string (省略値 "")
  キャッシュ用ディレクトリを指定する。指定しなかった場合はChaliceにより
  自動的に決定される。 >
--- plugin/chalice.vim 8 May 2002 05:59:16
+++ plugin/chalice.vim 9 May 2002 05:25:26
@@ -38,6 +38,11 @@
   let g:chalice_usermail = ''
 endif
 
+" ログファイル
+if !exists('g:chalice_logfile')
+  let g:chalice_logfile = ''
+endif
+
 " ブックマークデータファイル
 if !exists('g:chalice_bookmark')
   let g:chalice_bookmark = ''
@@ -2018,6 +2027,15 @@
   let opts = opts . ' -e http://' . b:host . '/' . b:bbs . '/index2.html'
   let opts = opts . ' http://' . b:host . '/test/bbs.cgi'
   call s:DoExternalCommand(s:cmd_curl . ' ' . opts)
+  " ログを取る
+  if s:SelectWindowByName(g:chalice_logfile) > 0
+    execute ":q!"
+    call s:GoBuf_Write()
+  endif
+  call append(0, '===================================================')
+  call append(1, s:cmd_curl . ' ' . opts)
+  call append(2, strftime('%Y/%m/%d %H:%M:%S'))
+  execute ":w! >> " . g:chalice_logfile
   " 後始末
   call delete(tmpfile)
   if !b:newthread
741名無しさん@お腹いっぱい。:02/05/09 14:39 ID:???
>>740のカキコから、こういうログが生成されます:

===================================================
curl -x proxy.foobar.ne.jp:8080 --connect-timeout 15 -m 30 -A "Monazilla/1.00 Chalice/1.3"
-b NAME= -b MAIL= -c "/home/foobar/.vim/chalice/cache/cookie" -b "/home/key/.vim/chalice/cache/cookie"
-d @"/tmp/v936292/43" -e http://pc.2ch.net/software/index2.html http://pc.2ch.net/test/bbs.cgi
2002/05/09 14:34:16
Title: 2ch閲覧プラグイン〜Chalice for Vim
From: 
Mail: sage
--------
書込のログを取るパッチです。
cookieなどの理由で書込に失敗した時に、書込内容を復元するのが目的ですが、
拡張すれば他にも使い道が出て来るかなあとちょっと期待。

(以下略)
742名無しさん@お腹いっぱい。:02/05/09 14:50 ID:???
ageとけ
743名無しさん@お腹いっぱい。:02/05/09 15:07 ID:???
>>742
いつも'A'でカキコする癖がついちゃってるからついついsageに(苦藁
744名無しさん@お腹いっぱい。:02/05/09 16:25 ID:???
>>740、chunkが一つ抜けていますた(褪
uuencodeしたものもつけておきますです。。。

@@ -851,6 +856,10 @@
   if g:chalice_bookmark == ''
     let g:chalice_bookmark = g:chalice_basedir . '/chalice.bmk'
   endif
+  " ログファイル情報構築
+  if g:chalice_logfile == ''
+    let g:chalice_logfile = g:chalice_basedir . '/chalice.log'
+  endif
 
   " キャッシュディレクトリの保証
   if !isdirectory(s:dir_cache)


begin 644 logfile-13-28.diff.bz2
M0EIH.3%!62936278^:T``-[?_^`P=N__]U[GB:V_[__R.O_;@``Q"H(@9@!(
M27%@`%`#7B@ZT`*H2D0IHTR:&@-&(!H,CR@`:!IZC1H`````&C-$.``-``#(
M```#(:-`````````"*:GE!H&DT8$P"8F``0P``F!#31DPC1IB,``X``T``,@
M```,AHT`````````$BB&0A&)ZC2;3331J::C1IY-0,3U!IH--,F3(`:--`&@
M#TH1>RFMRMR.OZM4F]&+^^J:=:J?AB2\E<&1L&?-T+U5Z]KYITTC(,[G^0U=
M;3"HO^Q@EP<-4@RB8&)00H0&TQMC3&VL`3A0UV#8.B7M*L'%#2W_:,(6;(2L
M.R3L4CC##26RBNM`W@JYL.`I8I^+7&(DBJCRFW(PY!2(D5"[I#HAGHQM9BHS
MS@0>/)5)H)%)(KKL+-PYPNY\-H:[";"D:.0U.F/LY;[B;XR2J37(T4QN]>@"
MDCG'P)O1#I%1J1MA*#GHC2/^C*D&,;&JP:T:-[AWO,&W1*>X%9$2+VI<;I>H
M1Q=?#4;\#,3@=D[1`O:NQ?1<#H5%'#I"TDZNH4T!*7=J"[7J\TA%O-;:6;,6
M(IR61&`(Q@,A@BRR"/H#P$-A9`8Y<X@&&`(XO`2TJOVE`4:4%OEV!F5MB;&;
M,#B9R`,-X/`+OAW>.)$_D;8$N+,?+F3#P*@8G$$'&1(HI!JI68.^S"3L:S7`
M):LD8CT!]/B[Z0J!=NC$FC09`BNMA,?H\L12,(;1$FCWN5(4IBK(4P!P<&Q=
M\9$Q$QE&3&&J3@*E3X:"C.;0PXW.+<-A["!;,'ZA18<NUQJ^=%E-I8(P2V*M
MHP&0%X.DE?>'*K3*6(\Y@^K"(%MA(@@7:&;)BS3+^-(6-$2YAM[R#Y"N9N_'
M<6(R;9%&8=R/$0-K"*G4B@W>H8NX]QJBI`&OI09RLTW[W81E*:^`V<;H)WU5
M&"'ML^WO=[G&P(M1NWT7"P<)+5(FLL=1A5@O'APA:ZUFDC2:Q72:C$[5SVZY
MDY$ZMLJ.$H09R&*9333H]+GX<%>J6JX&,I,YT!?!M$S0R@I,EV'<$T7SM9`W
M;_/M.V+Z"[R&7O)>0_(_8U3YSQ^(_@H)^%$43SJ'RG8@E>;(DF'X_`K$'4%"
MVRW'?:2L]82VKWAB2/P/Q.N=87`3)XH3,)B.0B(VRGFBC;/^M.8)$!;\I/$=
MDHGW/)8CQ**5/]X;O&*!G$TZ1@1'A2(JGS&[02?K`,14FCF)>47<D4X4)`EV
#/FM`
`
end
745 ◆PYOQ4sjo :02/05/09 21:48 ID:N8gjRrY/
簡易巡回機能を実装してみました。
'+'キーを押すと、次の栞に自動的に移動します。
(スレの栞でのカーソル位置が基準になります。)

ただし、スレ一覧が開かれている時に、スレッドの窓で押した時だけはその板の
次のスレに移動します。(nothreadlistで無効にもできます)

また、chalice_cruiseoptionsで挙動を制御できます。
- ignorefold: 閉じたfolding内のスレも巡回する
- loop:  スレ一覧の終端に達した場合、先端に戻る
- noboard:   板を巡回の対象から外す
- nothreadlist: 常にスレの栞を巡回する

ちょっと長いのでパッチは次のレスに跨ります:


begin 644 autocruise-13-28.diff.bz2
M0EIH.3%!62936<$3%G``!+Y?__0P>_______O]______/?__T?7[J^?_]QL?
M^_9H1&`*3A]45IDD2@!4J`H`HP`,`T13$)M#1--HAI'HR$\4]3RA@@`#3TF3
M"-!H&0]0&@`T&@``#0:`-`TR&FC('I"``T,C1D&FFFAHT::`8F0TTR-#0,0Q
M,@TT```!HT,330:-&"!ID,@&C$Q&FF(`#0R-&0::::&C1IH!B9#33(T-`Q#$
MR#30```&C0Q--!HT8(&F0R`:,3$::8)$4`*8FFD-%-ZIYH0T8:F""--#:(:-
MH8FA&`",`#4R9`R`!B&!&``F)DTPFGI"``T,C1D&FFFAHT::`8F0TTR-#0,0
MQ,@TT```!HT,330:-&"!ID,@&C$Q&FF"*2!--3)@2>@T$Q#:)1Y)^2GE-J:;
M)/*>IZ3U-I'J`T]$!ZAH'J>H>H&(]3$-`````````^!!8$2H,B>H!;!.U$^#
MKXK+*A)K9=B9K3-6M/63FI,HP4!H(X:VC!NE!C8KW@V5J!E[Z<D(9-ZFO5V<
M'QN2CB\+H3?V!4\6*6F3AS=U\ZQG*;>_.V/*6M&!<<)D-W0SCWQ73W'HUY-$
M\C0G,S*\O\-;FAS1#T*XE_=C1QT0PNNC/=CK;815EX>ZA5T;[F7&*YX7VSF5
MV;9;(&PU"[[ETX_HRY,9W&N;D'>I@PF*7L4PHF^'I84D"D9$2%3@;$V#;$QK
MU<QS6;F*UO.K@*#@2]^-[^&#&U7US$U_@[X&:;%BY^AT(X<'H>0#<3&GLTWT
MN;NYRTQSQ@,-PB`.S2[%O'H.[-:;!)B-JT-L`^G+.RWS-[1V=#MAK45NZ7(;
M#H#(;T8:>`<@NTKV->)O</8MN&WI]%D6"5FNG;9UBV^4V^D.4HIKE+GZ=G-P
MTWOD8ZJJHB(E*MQ6XP6!985SR28=IGM&F$ZDS99/F3(VX#!6@V[W%>98K-,W
M>,SWSU.1N2&M%/'<DS;._@U_'H]#2%X8JT!$E_-MIJ@JS)L`8>KV58&@U4JD
M(72*%(85$N$HHM!R215KXN:HIT<]*]M---I%Z1TV[O+K#>70VJV[D6_)SO!)
M-GM,;6A_IT804RHAJF#+)%,)M%M>+3SSB<37&)<5$92A(XDP=*&=(3+0#)2B
M)6@Y5VKNN=S)'!S.:1*?EQ751/.4]W-:]MU?1;)M$;?/Z83[Z;81V(7(F3B3
M$A(Q1;K^U.<'RM:.`Q$-#T/6DZ-\J<>3^[U$J`XW\=USNT$(RB8)IIH-5&-&
MYC3ES,Q,S,S+F9X%_UP>OU`D&-.HE0<)+$D.@FH)!$9^]$37)ILTHBY0I1`F
MYK"81)A)R162E4S!NRZ11O<2F]*4I1$1&B*9F4D%9*UV&YDI+6U3,44X30//
MO!XA$?>N$%0BNRUC(MF6\XH)F,#/*V#8-GLVT#P,)ES6:NJC.EDX845CSK*K
M586.R'CM;MT<,V6BJTHJH!IIKKE?BJX9Q7%8SEA$[1#.37+">>ZM55.\ER,F
M4T4\-)]3$725^RR-.F)7*)XO7ZC0OJ]T!S4(1==I:6DM9J:W=S/2Z4DL@J0+
M:H:24/4>`^61*2E]?.'1IE(2(8@VTE!6`0I2G@K:0ZP#2#;!]/VSUJ?`::5]
M)%^'OB(>R4F:`>0&&A^1.'(`,:>+E+"&"&`(7E7K[K<Y=:[[GLUU6SG4IW]!
M)9$HP3$J'%X2V_;ZB>2=SEVVZ>00^6=)"C"SFC#PKP'%X\W:G[6@NEEO&31D
746 ◆PYOQ4sjo :02/05/09 21:48 ID:???
M$$L'E=RV:GO0#12[7;P9U*;"[-^:_BVI1(@@VY$HBW,9*"S5Z'E)Q+0;&EQ;
M2)Y(:\NC/A(`ZQ+R^OV3\9[\G"LBH\7S"^1H'JG2.VF,"?3G,WP@U(3FU%%I
M/`M3S):63\:^<G=X/'ZR>:Y]8WX1(A`["<]Z!-WAX88L"BYA#3WY4"]AJ20A
MG#:3C),#8GCV)-EZ,&4/&`Y-C%N$QOM+G`(97+\K6K2V'B<%*Y]W$1A,$ZS)
MV0A+&^E26J;TN8-I/FVQ/(X.G4ALK.O72@.$!8X*#9"Q.%-X1>@(HE!4LD;"
M$L*:`;((A#B$%W5]AT%R5B*FA<\B+"5`*A9TEN`52UMAD-AJD)\FPE*35H`-
MJARE$Y130`4,+1`A>13DAXC([^$WZ,:[EL*=GEL`+4B.*QO:4M0:`^2R`&2\
M;;1OQ!%5"0PAG+KI"8B^E(>"1,=)>*F.JT+G)`[QV680F20A?2\FR6:@3[N_
M?GG=:&(8F-&I<5O72JO@"1*F@"AG*(+@!="^)Q,S64X@`Z2C`L9$WR;`G50,
MHP,*W[`K?=ZJBT(74T%-"G7=B4HG2V8YM7@-5-(`]6":@!GHV[I.F28SKQ:2
M`=K4!J2L.*0A$<8UC.!ORD#OW=),T)1M`\.70+%KVI*3IH),M2ZX6B$A-!@`
MWQ]#($#TVANRY(29@W*UH3;@QM!4(,^CS^E%K-!.:0!YEX$N!H"VRD`U@9\2
M=R!<KGF^A,40-L`M*3#II>JM,"]-*49,-2-X(4M3<:HX32G>0$08[)9G:#"`
M4A333>4L`+E)R,7:`XL)E(#+L';-*(+SK!$%T&D<-M.&+GJ%JN$(MKD2M;ZE
MV:RX*:*0$J4DYYWE[C]1URL0W:R8B,"2N0]53-,#I.;F$J5.)WO*?4YBBZFX
MFB(38@C`.J"F68WH!.[25O/37M"85YX;K6DX.ZR2))=B\FQ-H(:0.NMAZ,D%
MU$W1+)9MLFO@W4V=@#4`)TR4IYQ)D#(0>!CN>80,4:B(1K4,AS$90#DI2L1>
M#L:IVR,,.M9QXF2)S30TG54MA06:=T&=,\->6QSDVC<,9.F]O.F(:P!@!\AN
MN0Q-^WAS).$_!LIAP@D"4)NF!F-)=33SIFCFGS:DVX6ZD(7?-T#4!.C)D'E,
M\<]>\)!/#+9UIAYQ)VB^7XP=^.U?<,#DD8'?TPS(J`<RNOQ86GI:#!2U1USP
M<[^EM'ZH.+_,?`[43A!_%I)9\#LP\+O>U9Y2X07\8/XX&3QJ^AW+6ILS5X@N
M$$_,4!D.R,?X50<;R/1-:&FH$E(3]5&B]%BII%F\25Y[CWU.6OLH,,NI/,PJ
M?$9]<83-Q.\US>\&U#TY\<;7**4#%%*\B\LQ?RR1(4W+3[Y?=PQ=R,=#($,C
MZCMM/A2U$'Z2T5PDI?(0-&8,8C2\=#/.:5?*'(54?H<,;VW^U7B?XQ;C7KI2
M!/F)V@0VTY![X6$9N2ZA668B#(^]*J>XUCUSC?FU'E$RZK=U)?"-T>%9W,`[
MO#;;2DCF`)S2].4[0V=A19DKNSY1*B`&.9]HFI"O@?AHW`(=A\PU;]SJ@"\+
M@L4$'@$-.'$)D@C0JT3GHI&::P*-\,8`*]7=,!P6D7O;$A^7$10BT7DVZ0"&
MN=3IL"`A_'H[AN5I:7+B;,=P6R@=&*^4M6-]\JS7""WWGA3D+;4YQ"FJ!JXJ
M:HJ,Y/ZK+&&Z7#W^U=Y%5CLY^;,JEA=:1W6;&`S#W8SFTD,$]RTHL@DV\:GE
M6C;5$+;V6`B"QC<:%F[W?^)I'<OVT\G8Z5SD-:A6^_W]"D4$N0X_/G&XRQ;(
ML^L02N&]X,/G#,T+3:XC*&+&,H8'3J&0*&BII'BL?%@2+&=,Q*'7PBD87TTK
M!BAJ!HJ_]'^$/G!A8P1A3`DC`@4*J%5?0(+7G8HMSJ#"A-F)F)E-+@*&QIM"
9+K\;1?,T("H:&-BI5O_Q=R13A0D,$3%G````
`
end
747 ◆PYOQ4sjo :02/05/09 22:12 ID:???
>>745-746への追加です。重ならないのでゴメンしてください。。。

#巡回対象に板を含めた場合は、常に更新するようにしたいなあ…

diff -c -u -r1.1.1.2.2.40 chalice.vim
--- plugin/chalice.vim 9 May 2002 06:58:19 -0000 1.1.1.2.2.40
+++ plugin/chalice.vim 9 May 2002 12:56:58 -0000
@@ -1052,6 +1103,7 @@
 
   " URLは抽出できたが[板]がある場合
   if AL_hasflag(flag, 'bookmark') && curline =~ '^\s*\[板\]'
+    let s:cruiseline = line('.')
     return s:OpenBoard()
   endif
748名無しさん@お腹いっぱい。:02/05/10 01:30 ID:???
最近のChalice(datutil.vim導入後?)では、カキコ中のbackslash('\\')が
表示されないようですね。

uuencodeされたパッチがガタガタなので気がつきました。
他のブラウザでは正常に表示されているのですが…
749KoRoN@Vim%Chalice ◆ALICEsdk :02/05/10 02:00 ID:???
修正しました。どうやら:s//\={expr}/でexprが帰す文字列中のバックスラッシュは
食われる模様。…&とか特殊文字も食われちゃうのかしら?。
    http://www.kaoriya.net/testdir/chalice-patches/1.3.029 (>>748)
750KoRoN@Vim%Chalice ◆ALICEsdk :02/05/10 02:53 ID:???
>>740,>>745
ありがとうございます。ただし、申し訳ないですがどちらもChaliceの機能としての
取り込みはしばらく保留させてください。理由は個別にあるので書きます。

>>740 (ログ機能)
ログ取りの目的がカキコ失敗時の復元なら、カキコ後に帰ってくるHTMLをみて判断・
エラー回復したほうが正しいです。なのでそもそもログである必要は無いわけです。
でも個人的にはデバッグメッセージをログファイルに吐けると嬉しいので、ログその
ものが不要とは思ってません。それとやはり「ログを取らない機能」はないとダメで
す。

>>745 (巡回機能)
while 68000というあたりにX68Kを思い起こさせますが、それはさておき。簡易とは
言え「巡回機能」なのに、単に「リスト中の次のスレを開くキーマップ」を追加した
ことになっていませんか?。本質的には巡回とはそういうことなのかもしれませんけ
れど、それに加えて更新の無いスレは飛ばしたり、更新されていた場合には同じボタ
ンで画面単位でスクロールして末尾まで行ったら次スレへ、という機能があると嬉し
いと思っていますし、目指したいです。

(総評というか広報?)
現在考えているChaliceの構造改革案では、1つのnofileバッファを使いまわすのは止
める方向を検討しています。なのでnofileであることに依存するような拡張、改良は
将来を見越すとキツイです。その辺りを頭の片隅に置いて拡張、改良案を出してくれ
ると助かります。

こんな感じで保留ですが、どちらのパッチもしっかりディスクに保存しましたので、
いつか何らかの形で反映させたいと思います。ありがとうございました。
751名無しさん@お腹いっぱい。:02/05/10 12:09 ID:6Hqsdhj+
>  それとやはり「ログを取らない機能」はないとダメです。
ログファイル名をヌルデバイス(/dev/null or NUL)にする手が。

カキコログは眺めてみると自分がどれだけ2chで時間をムダにしたかがわかって
なかなか面白いですよ。ボスに見せればニカラグアに栄転できるかも。

ともあれ、Chaliceの根幹を変えるような変更はKoRoNさんにしかできない
(と、いうかしちゃいけない; 船が山に登っちゃいます)ので、2.0ラインの
プレリリースを楽しみに待ちたいと思います ъ( ゜ー^)

あと、self-explanatoryなパッチです。
栞からスレを開いたあとに<C-H><CR>でそのスレのある板に移動できるのが眼目。

--- plugin/chalice.vim 9 May 2002 17:45:32
+++ plugin/chalice.vim 10 May 2002 02:50:57
@@ -355,7 +355,7 @@
     " 強制的に外部ブラウザを使用するように指定された
     call s:OpenURL(a:url)
   elseif !s:Parse2chURL(a:url)
-    " URLが2chではない時
+    " URLが2chではない時、または板である時
     call s:GoBuf_BoardList()
     if search(a:url) != 0
       normal! zO0z.
@@ -369,7 +369,7 @@
       call s:AddHistoryJump(s:ScreenLine(), line('.'))
     endif
 
-    " URLが2chと判断される時
+    " URLが2chのスレッドと判断される時
     " s:parse2ch_host, s:parse2ch_board, s:parse2ch_datはParse2chURL()内で
     " 設定される暗黙的な戻り値。
     let curarticle = s:UpdateThread('', s:parse2ch_host, s:parse2ch_board, s:parse2ch_dat . '.dat', 'continue')
@@ -401,6 +401,15 @@
  endif
       endif
     endif
+
+    " 板一覧の該当行にカーソル移動
+    call s:GoBuf_BoardList()
+    if search(s:parse2ch_host . s:parse2ch_board) != 0
+      normal! zO0z.
+    endif
+    " 窓サイズの変更によるカーソル移動を回避
+    let retval = s:SelectWindowByName(s:buftitle_thread)
+    " call s:GoBuf_Thread()
 
     if !AL_hasflag(a:flag, '\cnoaddhist')
       call s:AddHistoryJump(s:ScreenLine(), line('.'))