hikiutils 0.2.3.17 → 0.2.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (251) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/Rakefile +76 -8
  4. data/exe/hiki +2 -3
  5. data/hikiutils.gemspec +1 -1
  6. data/lib/hikiutils.rb +9 -9
  7. data/lib/hikiutils/version.rb +1 -1
  8. data/lib/hikiutils_thor.rb +73 -61
  9. data/lib/templates/Rakefile_hiki_sync +96 -56
  10. data/{hikiutils_yamane/Rakefile → lib/templates/Rakefile_hiki_sync_new} +97 -57
  11. data/lib/templates/hiki_help.yml +48 -8
  12. metadata +6 -248
  13. data/abst/#testhiki# +0 -0
  14. data/abst/.DS_Store +0 -0
  15. data/abst/out2.pdf +0 -0
  16. data/abst/out3.aux +0 -15
  17. data/abst/out3.log +0 -193
  18. data/abst/out3.pdf +0 -0
  19. data/abst/out3.synctex.gz +0 -0
  20. data/abst/out3.tex +0 -106
  21. data/abst/out4.aux +0 -13
  22. data/abst/out4.log +0 -190
  23. data/abst/out4.pdf +0 -0
  24. data/abst/out4.synctex.gz +0 -0
  25. data/abst/out4.tex +0 -75
  26. data/abst/speed.png +0 -0
  27. data/abst/testhiki +0 -26
  28. data/abst/testhiki2 +0 -106
  29. data/abst/tmp.hiki +0 -14
  30. data/abst/tmp.html +0 -16
  31. data/abst/work.png +0 -0
  32. data/abst/yamane_abst.pdf +0 -0
  33. data/abst/yamane_abst.tex +0 -59
  34. data/abst/yamane_abst_new.pdf +0 -0
  35. data/abst/yamane_powerpoint.key +0 -0
  36. data/abst/yamane_powerpoint.pptx/.DS_Store +0 -0
  37. data/abst/yamane_powerpoint.pptx/Data/PresetImageFill0-1.jpg +0 -0
  38. data/abst/yamane_powerpoint.pptx/Data/PresetImageFill1-2.jpg +0 -0
  39. data/abst/yamane_powerpoint.pptx/Data/PresetImageFill2-3.jpg +0 -0
  40. data/abst/yamane_powerpoint.pptx/Data/PresetImageFill3-4.jpg +0 -0
  41. data/abst/yamane_powerpoint.pptx/Data/PresetImageFill4-5.jpg +0 -0
  42. data/abst/yamane_powerpoint.pptx/Data/PresetImageFill5-6.jpg +0 -0
  43. data/abst/yamane_powerpoint.pptx/Data/image1-12.png +0 -0
  44. data/abst/yamane_powerpoint.pptx/Data/image1-9.png +0 -0
  45. data/abst/yamane_powerpoint.pptx/Data/mt0@2x-13.jpg +0 -0
  46. data/abst/yamane_powerpoint.pptx/Data/mt10@2x-22.jpg +0 -0
  47. data/abst/yamane_powerpoint.pptx/Data/mt1@2x-14.jpg +0 -0
  48. data/abst/yamane_powerpoint.pptx/Data/mt2@2x-15.jpg +0 -0
  49. data/abst/yamane_powerpoint.pptx/Data/mt3@2x-16.jpg +0 -0
  50. data/abst/yamane_powerpoint.pptx/Data/mt4@2x-17.png +0 -0
  51. data/abst/yamane_powerpoint.pptx/Data/mt5@2x-18.jpg +0 -0
  52. data/abst/yamane_powerpoint.pptx/Data/mt6@2x-19.jpg +0 -0
  53. data/abst/yamane_powerpoint.pptx/Data/mt7@2x-20.png +0 -0
  54. data/abst/yamane_powerpoint.pptx/Data/mt8@2x-21.jpg +0 -0
  55. data/abst/yamane_powerpoint.pptx/Data/st0-23.jpg +0 -0
  56. data/abst/yamane_powerpoint.pptx/Data/st1-24.jpg +0 -0
  57. data/abst/yamane_powerpoint.pptx/Data/st2-25.jpg +0 -0
  58. data/abst/yamane_powerpoint.pptx/Data/st3-26.jpg +0 -0
  59. data/abst/yamane_powerpoint.pptx/Data/st4-276.jpg +0 -0
  60. data/abst/yamane_powerpoint.pptx/Data/st5-279.jpg +0 -0
  61. data/abst/yamane_powerpoint.pptx/Index.zip +0 -0
  62. data/abst/yamane_powerpoint.pptx/Metadata/BuildVersionHistory.plist +0 -8
  63. data/abst/yamane_powerpoint.pptx/Metadata/DocumentIdentifier +0 -1
  64. data/abst/yamane_powerpoint.pptx/Metadata/Properties.plist +0 -0
  65. data/abst/yamane_powerpoint.pptx/preview-micro.jpg +0 -0
  66. data/abst/yamane_powerpoint.pptx/preview-web.jpg +0 -0
  67. data/abst/yamane_powerpoint.pptx/preview.jpg +0 -0
  68. data/abst/yamane_powerpoint_new.key/Data/PresetImageFill0-1.jpg +0 -0
  69. data/abst/yamane_powerpoint_new.key/Data/PresetImageFill1-2.jpg +0 -0
  70. data/abst/yamane_powerpoint_new.key/Data/PresetImageFill2-3.jpg +0 -0
  71. data/abst/yamane_powerpoint_new.key/Data/PresetImageFill3-4.jpg +0 -0
  72. data/abst/yamane_powerpoint_new.key/Data/PresetImageFill4-5.jpg +0 -0
  73. data/abst/yamane_powerpoint_new.key/Data/PresetImageFill5-6.jpg +0 -0
  74. data/abst/yamane_powerpoint_new.key/Data/image1-12.png +0 -0
  75. data/abst/yamane_powerpoint_new.key/Data/image1-9.png +0 -0
  76. data/abst/yamane_powerpoint_new.key/Data/mt0@2x-13.jpg +0 -0
  77. data/abst/yamane_powerpoint_new.key/Data/mt10@2x-22.jpg +0 -0
  78. data/abst/yamane_powerpoint_new.key/Data/mt1@2x-14.jpg +0 -0
  79. data/abst/yamane_powerpoint_new.key/Data/mt2@2x-15.jpg +0 -0
  80. data/abst/yamane_powerpoint_new.key/Data/mt3@2x-16.jpg +0 -0
  81. data/abst/yamane_powerpoint_new.key/Data/mt4@2x-17.png +0 -0
  82. data/abst/yamane_powerpoint_new.key/Data/mt5@2x-18.jpg +0 -0
  83. data/abst/yamane_powerpoint_new.key/Data/mt6@2x-19.jpg +0 -0
  84. data/abst/yamane_powerpoint_new.key/Data/mt7@2x-20.png +0 -0
  85. data/abst/yamane_powerpoint_new.key/Data/mt8@2x-21.jpg +0 -0
  86. data/abst/yamane_powerpoint_new.key/Data/st0-381.jpg +0 -0
  87. data/abst/yamane_powerpoint_new.key/Data/st1-493.jpg +0 -0
  88. data/abst/yamane_powerpoint_new.key/Data/st2-495.jpg +0 -0
  89. data/abst/yamane_powerpoint_new.key/Data/st3-481.jpg +0 -0
  90. data/abst/yamane_powerpoint_new.key/Data/st4-485.jpg +0 -0
  91. data/abst/yamane_powerpoint_new.key/Data/st5-372.jpg +0 -0
  92. data/abst/yamane_powerpoint_new.key/Index.zip +0 -0
  93. data/abst/yamane_powerpoint_new.key/Metadata/BuildVersionHistory.plist +0 -8
  94. data/abst/yamane_powerpoint_new.key/Metadata/DocumentIdentifier +0 -1
  95. data/abst/yamane_powerpoint_new.key/Metadata/Properties.plist +0 -0
  96. data/abst/yamane_powerpoint_new.key/preview-micro.jpg +0 -0
  97. data/abst/yamane_powerpoint_new.key/preview-web.jpg +0 -0
  98. data/abst/yamane_powerpoint_new.key/preview.jpg +0 -0
  99. data/exe/hiki_thor +0 -5
  100. data/exe/hiki_thor~ +0 -8
  101. data/exe/hiki~ +0 -8
  102. data/hikis/README.hiki +0 -64
  103. data/hikis/README.hiki.html +0 -55
  104. data/hikis/README_ja.hiki +0 -67
  105. data/hikis/README_ja.hiki.html +0 -59
  106. data/hikis/yamane.hiki +0 -36
  107. data/hikiutils.wiki/Home.md +0 -68
  108. data/hikiutils.wiki/README.md +0 -65
  109. data/hikiutils.wiki/README_ja.md +0 -68
  110. data/hikiutils.wiki/yamane.md +0 -42
  111. data/hikiutils_bob/.gitignore +0 -1
  112. data/hikiutils_bob/Rakefile +0 -488
  113. data/hikiutils_bob/code.hiki +0 -31
  114. data/hikiutils_bob/figs/calphad_bob.pdf +0 -0
  115. data/hikiutils_bob/figs/hikiutils_bob.001.bb +0 -5
  116. data/hikiutils_bob/figs/hikiutils_bob.001.jpeg +0 -0
  117. data/hikiutils_bob/figs/hikiutils_bob.002.bb +0 -5
  118. data/hikiutils_bob/figs/hikiutils_bob.002.jpeg +0 -0
  119. data/hikiutils_bob/figs/hikiutils_bob.003.jpeg +0 -0
  120. data/hikiutils_bob/figs/hikiutils_bob.004.jpeg +0 -0
  121. data/hikiutils_bob/figs/hikiutils_bob.005.jpeg +0 -0
  122. data/hikiutils_bob/figs/hikiutils_bob.006.jpeg +0 -0
  123. data/hikiutils_bob/figs/hikiutils_bob.007.jpeg +0 -0
  124. data/hikiutils_bob/figs/hikiutils_bob.pdf +0 -0
  125. data/hikiutils_bob/figs/sync.pdf +0 -0
  126. data/hikiutils_bob/hiki_help.yml +0 -53
  127. data/hikiutils_bob/hikiutils_bob.graffle +0 -1195
  128. data/hikiutils_bob/hikiutils_bob.hiki +0 -6
  129. data/hikiutils_bob/hikiutils_bob.key +0 -0
  130. data/hikiutils_bob/hikiutils_bob/hikiutils_bob.001.jpeg +0 -0
  131. data/hikiutils_bob/hikiutils_bob/hikiutils_bob.002.jpeg +0 -0
  132. data/hikiutils_bob/hikiutils_bob/hikiutils_bob.003.jpeg +0 -0
  133. data/hikiutils_bob/hikiutils_bob/hikiutils_bob.004.jpeg +0 -0
  134. data/hikiutils_bob/hikiutils_bob/hikiutils_bob.005.jpeg +0 -0
  135. data/hikiutils_bob/hikiutils_bob/hikiutils_bob.006.jpeg +0 -0
  136. data/hikiutils_bob/hikiutils_bob/hikiutils_bob.007.jpeg +0 -0
  137. data/hikiutils_bob/latex_all.hiki +0 -230
  138. data/hikiutils_bob/latex_dir/code.aux +0 -26
  139. data/hikiutils_bob/latex_dir/code.log +0 -28
  140. data/hikiutils_bob/latex_dir/code.tex +0 -39
  141. data/hikiutils_bob/latex_dir/head.tex +0 -10
  142. data/hikiutils_bob/latex_dir/hikiutils_bob.aux +0 -4
  143. data/hikiutils_bob/latex_dir/hikiutils_bob.log +0 -345
  144. data/hikiutils_bob/latex_dir/hikiutils_bob.pdf +0 -0
  145. data/hikiutils_bob/latex_dir/hikiutils_bob.synctex.gz +0 -0
  146. data/hikiutils_bob/latex_dir/hikiutils_bob.tex +0 -55
  147. data/hikiutils_bob/latex_dir/hikiutils_bob.toc +0 -41
  148. data/hikiutils_bob/latex_dir/jlisting.sty +0 -216
  149. data/hikiutils_bob/latex_dir/jlisting.tex +0 -216
  150. data/hikiutils_bob/latex_dir/latex2hiki.aux +0 -28
  151. data/hikiutils_bob/latex_dir/latex2hiki.tex +0 -43
  152. data/hikiutils_bob/latex_dir/latex_all.aux +0 -37
  153. data/hikiutils_bob/latex_dir/latex_all.log +0 -28
  154. data/hikiutils_bob/latex_dir/latex_all.tex +0 -249
  155. data/hikiutils_bob/latex_dir/pre.tex +0 -36
  156. data/hikiutils_bob/latex_dir/references.tex +0 -4
  157. data/hikiutils_bob/latex_dir/sync.aux +0 -54
  158. data/hikiutils_bob/latex_dir/sync.tex +0 -262
  159. data/hikiutils_bob/references.hiki +0 -3
  160. data/hikiutils_bob/sync.hiki +0 -220
  161. data/hikiutils_bob/tmp1.txt +0 -32
  162. data/hikiutils_bob/toc.hiki +0 -32
  163. data/hikiutils_yamane/.gitignore +0 -1
  164. data/hikiutils_yamane/abstract.hiki +0 -8
  165. data/hikiutils_yamane/backup/hikiutils%28optparse%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%29 +0 -309
  166. data/hikiutils_yamane/backup/hikiutils%28thor%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%29 +0 -1
  167. data/hikiutils_yamane/backup/hikiutils_yamane +0 -703
  168. data/hikiutils_yamane/backup/hikiutils_yamane.hiki +0 -0
  169. data/hikiutils_yamane/backup/hikiutils_yamane_#hikiutils_yamane +0 -1
  170. data/hikiutils_yamane/backup/hikiutils_yamane_command_table +0 -19
  171. data/hikiutils_yamane/backup/hikiutils_yamane_introduction +0 -7
  172. data/hikiutils_yamane/discussion.hiki +0 -9
  173. data/hikiutils_yamane/figs/hikiutils_yamane.001.jpg +0 -0
  174. data/hikiutils_yamane/figs/hikiutils_yamane.002.bb +0 -5
  175. data/hikiutils_yamane/figs/hikiutils_yamane.002.jpg +0 -0
  176. data/hikiutils_yamane/figs/hikiutils_yamane.003.jpg +0 -0
  177. data/hikiutils_yamane/figs/hikiutils_yamane.004.jpg +0 -0
  178. data/hikiutils_yamane/figs/hikiutils_yamane.005.jpg +0 -0
  179. data/hikiutils_yamane/figs/hikiutils_yamane.006.jpg +0 -0
  180. data/hikiutils_yamane/figs/hikiutils_yamane.007.jpg +0 -0
  181. data/hikiutils_yamane/hiki_help.yml +0 -53
  182. data/hikiutils_yamane/hikiutils_yamane.hiki +0 -23
  183. data/hikiutils_yamane/hikiutils_yamane.key/Data/110809_FamilyChineseOahu_EN_00317_2040x1360-small-12.jpg +0 -0
  184. data/hikiutils_yamane/hikiutils_yamane.key/Data/110809_FamilyChineseOahu_EN_02016_981x654-small-14.jpg +0 -0
  185. data/hikiutils_yamane/hikiutils_yamane.key/Data/110809_familychineseoahu_en_00317_2040x1360-96.jpeg +0 -0
  186. data/hikiutils_yamane/hikiutils_yamane.key/Data/110809_familychineseoahu_en_02016_981x654-97.jpeg +0 -0
  187. data/hikiutils_yamane/hikiutils_yamane.key/Data/110809_familychineseoahu_en_02390_2880x1921-94.jpeg +0 -0
  188. data/hikiutils_yamane/hikiutils_yamane.key/Data/110809_familychineseoahu_en_02390_2880x1921-small-95.jpg +0 -0
  189. data/hikiutils_yamane/hikiutils_yamane.key/Data/mt0@2x-102.jpg +0 -0
  190. data/hikiutils_yamane/hikiutils_yamane.key/Data/mt10@2x-112.jpg +0 -0
  191. data/hikiutils_yamane/hikiutils_yamane.key/Data/mt1@2x-103.jpg +0 -0
  192. data/hikiutils_yamane/hikiutils_yamane.key/Data/mt2@2x-104.jpg +0 -0
  193. data/hikiutils_yamane/hikiutils_yamane.key/Data/mt3@2x-105.jpg +0 -0
  194. data/hikiutils_yamane/hikiutils_yamane.key/Data/mt4@2x-106.jpg +0 -0
  195. data/hikiutils_yamane/hikiutils_yamane.key/Data/mt5@2x-107.jpg +0 -0
  196. data/hikiutils_yamane/hikiutils_yamane.key/Data/mt6@2x-108.jpg +0 -0
  197. data/hikiutils_yamane/hikiutils_yamane.key/Data/mt7@2x-109.jpg +0 -0
  198. data/hikiutils_yamane/hikiutils_yamane.key/Data/mt8@2x-110.jpg +0 -0
  199. data/hikiutils_yamane/hikiutils_yamane.key/Data/mt9@2x-111.jpg +0 -0
  200. data/hikiutils_yamane/hikiutils_yamane.key/Data/pasted-image-100.tiff +0 -0
  201. data/hikiutils_yamane/hikiutils_yamane.key/Data/pasted-image-98.tiff +0 -0
  202. data/hikiutils_yamane/hikiutils_yamane.key/Data/pasted-image-small-101.png +0 -0
  203. data/hikiutils_yamane/hikiutils_yamane.key/Data/pasted-image-small-99.png +0 -0
  204. data/hikiutils_yamane/hikiutils_yamane.key/Data/st0-113.jpg +0 -0
  205. data/hikiutils_yamane/hikiutils_yamane.key/Data/st1-114.jpg +0 -0
  206. data/hikiutils_yamane/hikiutils_yamane.key/Data/st2-115.jpg +0 -0
  207. data/hikiutils_yamane/hikiutils_yamane.key/Data/st3-116.jpg +0 -0
  208. data/hikiutils_yamane/hikiutils_yamane.key/Data/st4-117.jpg +0 -0
  209. data/hikiutils_yamane/hikiutils_yamane.key/Data/st5-118.jpg +0 -0
  210. data/hikiutils_yamane/hikiutils_yamane.key/Data/st6-119.jpg +0 -0
  211. data/hikiutils_yamane/hikiutils_yamane.key/Data/tile_paper_medgray-93.jpg +0 -0
  212. data/hikiutils_yamane/hikiutils_yamane.key/Index.zip +0 -0
  213. data/hikiutils_yamane/hikiutils_yamane.key/Metadata/BuildVersionHistory.plist +0 -8
  214. data/hikiutils_yamane/hikiutils_yamane.key/Metadata/DocumentIdentifier +0 -1
  215. data/hikiutils_yamane/hikiutils_yamane.key/Metadata/Properties.plist +0 -0
  216. data/hikiutils_yamane/hikiutils_yamane.key/preview-micro.jpg +0 -0
  217. data/hikiutils_yamane/hikiutils_yamane.key/preview-web.jpg +0 -0
  218. data/hikiutils_yamane/hikiutils_yamane.key/preview.jpg +0 -0
  219. data/hikiutils_yamane/hikiutils_yamane/hikiutils_yamane.001.jpeg +0 -0
  220. data/hikiutils_yamane/hikiutils_yamane/hikiutils_yamane.002.jpeg +0 -0
  221. data/hikiutils_yamane/hikiutils_yamane/hikiutils_yamane.003.jpeg +0 -0
  222. data/hikiutils_yamane/hikiutils_yamane/hikiutils_yamane.004.jpeg +0 -0
  223. data/hikiutils_yamane/hikiutils_yamane/hikiutils_yamane.005.jpeg +0 -0
  224. data/hikiutils_yamane/hikiutils_yamane/hikiutils_yamane.006.jpeg +0 -0
  225. data/hikiutils_yamane/hikiutils_yamane/hikiutils_yamane.007.jpeg +0 -0
  226. data/hikiutils_yamane/introduction.hiki +0 -10
  227. data/hikiutils_yamane/latex_dir/abstract.aux +0 -22
  228. data/hikiutils_yamane/latex_dir/abstract.tex +0 -9
  229. data/hikiutils_yamane/latex_dir/discussion.aux +0 -22
  230. data/hikiutils_yamane/latex_dir/discussion.tex +0 -9
  231. data/hikiutils_yamane/latex_dir/head.tex +0 -10
  232. data/hikiutils_yamane/latex_dir/hikiutils_yamane.aux +0 -10
  233. data/hikiutils_yamane/latex_dir/hikiutils_yamane.log +0 -344
  234. data/hikiutils_yamane/latex_dir/hikiutils_yamane.pdf +0 -0
  235. data/hikiutils_yamane/latex_dir/hikiutils_yamane.synctex.gz +0 -0
  236. data/hikiutils_yamane/latex_dir/hikiutils_yamane.tex +0 -62
  237. data/hikiutils_yamane/latex_dir/hikiutils_yamane.toc +0 -31
  238. data/hikiutils_yamane/latex_dir/introduction.aux +0 -26
  239. data/hikiutils_yamane/latex_dir/introduction.tex +0 -12
  240. data/hikiutils_yamane/latex_dir/jlisting.sty +0 -216
  241. data/hikiutils_yamane/latex_dir/method.aux +0 -46
  242. data/hikiutils_yamane/latex_dir/method.tex +0 -253
  243. data/hikiutils_yamane/latex_dir/pre.tex +0 -36
  244. data/hikiutils_yamane/latex_dir/results.aux +0 -50
  245. data/hikiutils_yamane/latex_dir/results.tex +0 -257
  246. data/hikiutils_yamane/method.hiki +0 -238
  247. data/hikiutils_yamane/results.hiki +0 -228
  248. data/hikiutils_yamane/test.rb +0 -10
  249. data/hikiutils_yamane/toc.hiki +0 -19
  250. data/lib/hikiutils.rb~ +0 -389
  251. data/lib/hikiutils_thor.rb~ +0 -323
@@ -1,228 +0,0 @@
1
- {{toc}}
2
- !結果
3
- !!コマンドの命名原則
4
-
5
- 機能ごとの動作はコマンドのオプションによって指定される.
6
- このオプションにどのような名前をつけるかは,どれだけコマンドを覚えやすいかという
7
- 意味で重要である.コマンドの振る舞いを的確に表す名称をつける必要がある.
8
-
9
- この振る舞いとしてもっとも受け入れやすいのがshellで用意されているコマンドである.
10
- pwd, ls, rm, touch, openなどはもっとも直感的に動作がわかるコマンドである.
11
- hikiutilsの振る舞いを予測できるシェルコマンドと同じ名前でオプションを提供する.
12
-
13
-
14
- !!!hikiutilsの想定利用形態
15
- ここでhikiutilsがあらかじめ想定している利用形態を解説する.
16
-
17
- !!!caption:(fig:002)hikiutilsがあらかじめ想定している利用形態.
18
- {{attach_view(hikiutils_yamane.002.jpg,hikiutils_yamane)}}
19
-
20
- hikiutilsは,
21
- *local PCとglobal serverとが用意されており,
22
- *それらのデータをrsyncで同期する
23
- ことで動作することを想定される.これは,ネットに繋がっていないオフラインの状況でも
24
- テキストなどの編集が可能で,さらに不用意な書き換えを防ぐための機構である.さらに,
25
- どちらもが何かあった時のバックアップともなって,ミスによる手戻りを防いでいる.
26
-
27
- これらの設定は,~/.hikircにyaml形式で記述・保存されている.
28
- <<< yaml
29
- bob% cat ~/.hikirc
30
- :srcs:
31
- - :nick_name: new_ist
32
- :local_dir: "/Users/bob/Sites/new_ist_data/ist_data"
33
- :local_uri: http://localhost/ist
34
- :global_dir: nishitani@ist.ksc.kwansei.ac.jp:/home/nishitani/new_ist_data/ist_data
35
- :global_uri: http://ist.ksc.kwansei.ac.jp/~nishitani/
36
- - :nick_name: dmz0
37
- :local_dir: "/Users/bob/Sites/nishitani0/Internal/data"
38
- :local_uri: http://localhost/~bob/nishitani0/Internal
39
- :global_dir: bob@dmz0:/Users/bob/Sites/nishitani0/Internal/data
40
- :global_uri: http://nishitani0.kwansei.ac.jp/~bob/nishitani0/Internal
41
- >>>
42
- また,一般的に一人のユーザがいくつものまとまりとしてのlocal-globalペアを
43
- 保持して管理することが普通である.それぞれにnicke_nameをつけて管理している.
44
- <<< bash
45
- bob% hiki -s
46
- hikiutils: provide utilities for helping hiki editing.
47
- "open -a mi"
48
- target_no:1
49
- editor_command:open -a mi
50
- id | name | local directory | global uri
51
- -----------------------------------------------------------------------------
52
- 0 | new_ist | /Users/bob/Sites/new_ist_data/ist_data | http://ist.ksc.k
53
- *1 | dmz0 | /Users/bob/Sites/nishitani0/Internal/data | http://nishitani
54
- 2 | ist | /Users/bob/Sites/hiki-data/data | http://ist.ksc.k
55
- 3 | new_maple | /Users/bob/Sites/new_ist_data/maple_hiki_d| http://ist.ksc.k
56
- >>>
57
- とすると,それらの一覧と,いまtargetにしているnick_nameディレクリが表示される.
58
-
59
- !!!コメンド名と振る舞いの詳細
60
-
61
- 検討の結果コマンドを以下の表{{ref(table:ShellOption)}}のとおり書き換えることとする.
62
- 上部に記した,特によく使うコマンドに関しては,shellでよく使われるコマンド名と一致するにようにした.
63
-
64
- !!!caption:(table:ShellOption)コマンドオプションとshellコマンドの対応.
65
- ||変更前||変更後||動作の解説
66
- ||edit FILE ||open|| open file
67
- ||list [FILE] ||ls|| list files
68
- ||rsync ||rsync|| rsync files
69
- ||update FILE ||touch|| update file
70
- ||show ||pwd|| show nick_names
71
- ||target VAL ||cd|| targetを変える,cdとのメタファ
72
- || || ||
73
- ||move [FILE] ||mv|| move file
74
- ||remove [FILE] ||rm|| remove files
75
- ||add || || add sources info
76
- ||checkdb || || check database file
77
- ||datebase FILE ||db|| read datebase file
78
- ||display FILE ||show|| display converted hikifile
79
- ||euc FILE || || translate file to euc
80
- ||help [COMMAND] ||-h|| Describe available commands
81
- ||version ||-v|| show program version
82
-
83
- それぞれの意図を動作の解説として記述する.
84
-
85
- !!!! open FILE
86
- ファイルを編集のためにeditorでopen.Editorは~/.hikircに
87
- :editor_command: open -a mi
88
- として保存されている.open -a miをemacsなどに適宜変更して使用.
89
-
90
- !!!! ls [FILE]
91
- local_dirにあるファイル名を[FILE*]として表示.例えば,hikiutils_yamane以下の拡張子が
92
- ついたファイルを表示.hikiシステムではtextディレクトリーは階層構造を取ることができない.
93
- 西谷研ではdirectoryの代わりにスネーク表記で階層構造を表している.
94
-
95
- !!!! rsync
96
- local_dirの内容をglobal_dirにrsyncする.逆方向は同期に誤差が生じたり,permissionが
97
- おかしくなるので,現在のところ一方向の同期のみとしている.したがって,作業手順としては
98
- テキストの変更はlocal_dirで読み行うようにしている.
99
-
100
- !!!! touch FILE
101
- loccal_dirで書き換えたFILEの内容をlocal_uriに反映させ,ブラウザで表示.シェルコマンドの
102
- touchによって,変更時間を現在に変え,最新状態とするのに似せてコマンド名をtouchとしている.
103
-
104
- !!!! pwd
105
- nick_nameの一覧とtargetを表示,current targetをcurrent dirとみなして,
106
- コマンド名をpwdとした.
107
-
108
- !!!! cd VAL
109
- targetを変える,change directoryとのメタファ.ただし,いまのところnick_nameでは
110
- 対応しておらず,nick_nameの番号をVAL入力することで変更する.
111
- !!Thorによる実装
112
- 手法のところで概観した通り,Thorを用いることで記述の簡略化が期待できる.ここでは,実際に書き換える前後,すなわちoptparse版とThor版の対応するコードを比較することで,以下の具体的な違い
113
- *クラス初期化
114
- *コマンド定義
115
- *CLIの実行プロセス
116
- について詳しく検討を行う.
117
-
118
- !!!クラス初期化
119
- Thorのinitializeでのコードの呼び出し関係は図{{ref(fig:003)}}の通りである.
120
-
121
- !!!!caption:(fig:003)Thorのinitializeでのコード.
122
- {{attach_view(hikiutils_yamane.003.jpg,hikiutils_yamane)}}
123
-
124
- この動きを順を追って説明すると
125
- #Hikithor::CLI.start(ARGV)が呼ばれる
126
- #initializeメソッドが呼ばれる
127
- #これではThorのinitializeメソッドが呼ばれない
128
- #superを書くことでThorのinitializeメソッドが呼ばれる
129
- となる.
130
-
131
- この実装コードは次の通りである.
132
- <<< ruby
133
-
134
- module Hikithor
135
-
136
- DATA_FILE=File.join(ENV['HOME'],'.hikirc')
137
- attr_accessor :src, :target, :editor_command, :browser, :data_name, :l_dir
138
-
139
- class CLI < Thor
140
- def initialize(*args)
141
- super
142
- @data_name=['nick_name','local_dir','local_uri','global_dir','global_uri']
143
- data_path = File.join(ENV['HOME'], '.hikirc')
144
- DataFiles.prepare(data_path)
145
-
146
- ...以下略...
147
- end
148
- >>>
149
- optparseではrequireでoptparseを呼びoptparseのinitializeを定義する必要はないが,Thorはinitializeを定義する必要がある.Thorの定義方法はrequireでThorを呼びCLIクラスで継承し,initializeメソッドにsuperを書くことでThorのinitializeが呼ばれる.initializeメソッド内ではThorの初期設定がされていないため,スーパークラスのメソッドを読み出してくれるsuperを書き加えることで図のようにinitializeメソッド内でThorのinitilalizeメソッドが呼ばれ定義される.
150
-
151
- !!!コマンド定義
152
- Thorではoptparseのような登録処理はない.コマンド記述のひな形は図{{ref(fig:004)}}の通りである.
153
-
154
- !!!!caption:(fig:004)Thorにおけるコマンド記述のひな形.
155
- {{attach_view(hikiutils_yamane.004.jpg,hikiutils_yamane)}}
156
-
157
- このひな形を順を追って説明する.
158
- #desc以降にコマンド名と,その説明が記述される.これらはコマンドhelpで一覧として表示させる
159
- #mapによって別のコマンド名でも実行できるように定義される.
160
- #defで定義されたメソッドの実行コード
161
-
162
- この実装コードは次の通りである.
163
- <<< ruby
164
- desc 'show,--show', 'show sources'
165
- map "--show" => "show"
166
- def show
167
- printf("target_no:%i\n",@src[:target])
168
- printf("editor_command:%s\n",@src[:editor_command])
169
- ,,,以下略...
170
- end
171
- >>>
172
- Thorではdescで一覧を表示されるコマンド名,コマンドの説明を登録する.しかし,ここで記述したコマンドは単に一覧で表示させるためのものであり,実際に実行される時に呼び出すコマンド名は,defで定義された名前である.Thorでは処理実行を行うメソッド名がコマンド名となり,コマンド名1つが対応する.
173
-
174
- これに別名を与えるために利用されるキーワードがmapである.
175
- <<<
176
- map A => B
177
- >>>
178
- mapとはBと呼ばれるメソッドをAでも呼べるようにしてくれるものである.
179
- よって,これを使うことでコマンドの別名を指定することができる.
180
-
181
- 以上より,Thorではコマンドの指定と処理にはdesc,map,処理メソッドだけで済む.optparseではコマンドを登録するためのメソッドと処理メソッドの両方が必要になっていた.一方Thorでは,処理メソッドが直接コマンド名となるため記述が簡潔になる.
182
-
183
- !!!CLIの実行プロセス
184
- CLIの実行プロセスは図{{ref(fig:006)}}の通りである.
185
-
186
- !!!!caption:(fig:006)CLIの実行プロセス.
187
- {{attach_view(hikiutils_yamane.006.jpg,hikiutils_yamane)}}
188
-
189
- ThorにおけるCLIの実行プロセスは次の通りである.
190
- #hiki_thorのHikithor::CLI.start(ARGV)でhikiutils_thor.rbのCLIクラスを呼ぶ
191
- #hikiutils_thor.rbのCLIクラスのメソッドを順に実行していく
192
-
193
- Thorではstart(ARGV)を呼び出すことでCLIを開始する.Hikithor::CLI.start(ARGV)を実行されることによりrequireで呼ばれているhikiutils_thor.rbのCLIコマンドを順に実行する.そして,入力されたコマンドと一致するメソッドを探し,そのコマンドの処理が実行される.
194
-
195
- exe/hiki_thorの具体的な記述は次の通りである.
196
- <<< ruby
197
- #!/usr/bin/env ruby
198
-
199
- require "hikiutils_thor"
200
-
201
- Hikithor::CLI.start(ARGV)
202
- >>>
203
- hikiutilsのoptparseバージョンと同様に「require "hikituils_thor"」ではlib/hikiutils_thor.rbを読み出してくることを期待している.
204
- ここでもgemspecファイルでlibへのロードパスの記述がされているため,hikiutils_thor.rbを参照することができる.
205
- 「Hikithor::CLI.start(ARGV)」ではlib/hikiutils_thor.rbのHikithorモジュールCommandクラスを実行する記述が成されている.
206
-
207
- 呼び出される側のlib/hikiutils_thor.rbの具体的な記述は次の通りである.
208
- <<< ruby
209
-
210
- module Hikithor
211
-
212
- DATA_FILE=File.join(ENV['HOME'],'.hikirc')
213
- attr_accessor :src, :target, :editor_command, :browser, :data_name, :l_dir
214
-
215
- class CLI < Thor
216
- def initialize(*args)
217
- super
218
- @data_name=['nick_name','local_dir','local_uri','global_dir','global_uri']
219
- data_path = File.join(ENV['HOME'], '.hikirc')
220
- DataFiles.prepare(data_path)
221
- ...以下略...
222
- >>>
223
-
224
- 通常のclass呼び出しで生成されるようになっている.
225
- rubyにおいても通常のclassからの実行では,newした後にexeする.
226
- しかし,Thorにおいてはstartという関数名で初期化・実行される.
227
- これは,rubyに付属しているRakefileの実行方法とよく似た構文となっている.
228
-
@@ -1,10 +0,0 @@
1
- require 'fileutils'
2
- entries = Dir.entries('figs')
3
- entries.each{|file|
4
- sp=file.split('.')
5
- if sp[2]=='jpq'
6
- target=sp[0]+'.'+sp[1]+'.jpg'
7
- p command = "mv figs/#{file} figs/#{target}"
8
- system command
9
- end
10
- }
@@ -1,19 +0,0 @@
1
- !1:概要
2
- !2:序論
3
- !3:方法
4
- !!3.1:optparseとthorの比較
5
- !!!3.1.1:optparse
6
- !!!3.1.2:Thor
7
- !!3.2:既存のhikiutilsのコマンド解説
8
- !!!3.2.1:コマンドの登録と実行メソッド
9
- !!!3.2.2:CLIの実行プロセス
10
- !!!3.2.3:コード
11
- !4:結果
12
- !!4.1:コマンドの命名原則
13
- !!!4.1.1:hikiutilsの想定利用形態
14
- !!!4.1.2:コメンド名と振る舞いの詳細
15
- !!4.2:Thorによる実装
16
- !!!4.2.1:クラス初期化
17
- !!!4.2.2:コマンド定義
18
- !!!4.2.3:CLIの実行プロセス
19
- !!!4.2.4:optparseとの全体的な比較
@@ -1,389 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
- require 'kconv'
3
- require 'hikidoc'
4
- require 'erb'
5
- require "hikiutils/version"
6
- require "hikiutils/tmarshal"
7
- require "hikiutils/infodb"
8
- require 'systemu'
9
- require 'optparse'
10
- require 'fileutils'
11
- require 'yaml'
12
- require 'pp'
13
-
14
- module HikiUtils
15
- DATA_FILE=File.join(ENV['HOME'],'.hikirc')
16
- attr_accessor :src, :target, :editor_command, :browser, :data_name, :l_dir
17
-
18
- class Command
19
-
20
-
21
- HTML_TEMPLATE = <<EOS
22
- <!DOCTYPE html
23
- PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
24
- "http://www.w3.org/TR/html4/loose.dtd">
25
- <html lang="ja">
26
- <html>
27
- <head>
28
- <meta http-equiv="Content-Language" content="ja">
29
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
30
- <title><%= title %></title>
31
- </head>
32
- <body>
33
- <%= body %>
34
- </body>
35
- </html>
36
- EOS
37
-
38
- def self.run(argv=[])
39
- print "hikiutils: provide utilities for helping hiki editing.\n"
40
- new(argv).execute
41
- end
42
-
43
- def initialize(argv=[])
44
- @argv = argv
45
- @data_name=['nick_name','local_dir','local_uri','global_dir','global_uri']
46
- data_path = File.join(ENV['HOME'], '.hikirc')
47
- DataFiles.prepare(data_path)
48
- read_sources
49
- end
50
-
51
- def execute
52
- @argv << '--help' if @argv.size==0
53
- command_parser = OptionParser.new do |opt|
54
- opt.on('-v', '--version','show program Version.') { |v|
55
- opt.version = HikiUtils::VERSION
56
- puts opt.ver
57
- }
58
- opt.on('-s', '--show','show sources') {show_sources}
59
- opt.on('-a', '--add','add sources info') {add_sources }
60
- opt.on('-t', '--target VAL','set target id') {|val| set_target(val) }
61
- opt.on('-e', '--edit FILE','open file') {|file| edit_file(file) }
62
- opt.on('-l', '--list [FILE]','list files') {|file| list_files(file) }
63
- opt.on('-u', '--update FILE','update file') {|file| update_file(file) }
64
- opt.on('-r', '--rsync','rsync files') {rsync_files}
65
- opt.on('--database FILE','read database file') {|file| db_file(file)}
66
- opt.on('--display FILE','display converted hikifile') {|file| display(file)}
67
- opt.on('-c', '--checkdb','check database file') {check_db}
68
- opt.on('--remove FILE','remove file') {|file| remove_file(file)}
69
- opt.on('--move FILES','move file1,file2',Array) {|files| move_file(files)}
70
- opt.on('--euc FILE','translate file to euc') {|file| euc_file(file) }
71
- opt.on('--initialize','initialize source directory') {dir_init() }
72
- end
73
- begin
74
- command_parser.parse!(@argv)
75
- rescue=> eval
76
- p eval
77
- end
78
- dump_sources
79
- exit
80
- end
81
-
82
- def dir_init()
83
- begin
84
- p target_dir = File.readlines('./.hikirc')[0]
85
- rescue
86
- p target_dir=@src[:srcs][@target][:local_dir]
87
- File.open('./.hikirc','w'){|file| file.print "#{target_dir}\n"}
88
- end
89
- # make dirs
90
- ['figs','data','latex_dir'].each{|dir|
91
- begin
92
- Dir.mkdir(dir)
93
- rescue => e
94
- print e
95
- end
96
- }
97
- # cp default files
98
- cp_files=[['Rakefile_hiki_sync','Rakefile'],
99
- ['hiki_help.yml','hiki_help.yml'],
100
- ['head.tex','latex_dir/head.tex'],
101
- ['pre.tex','latex_dir/pre.tex'],
102
- ['jlisting.sty','latex_dir/jlisting.tex'],
103
- ]
104
- cp_files.each_with_index{|files,i|
105
- p source = File.join(File.expand_path('..', __FILE__),'templates',files[0])
106
- p target = File.join(Dir.pwd,files[1])
107
- if i==0 #force cp of new Rakefile
108
- FileUtils.cp(source,target,:verbose=>true)
109
- else #avoid latex files overwritten
110
- FileUtils.cp(source,target,:verbose=>true) unless File.exist?(target)
111
- end
112
- }
113
- # arrange gitignore
114
- begin
115
- p cont=File.read('./.gitignore')
116
- unless cont.include?('.hikirc')
117
- File.open('./.gitignore','w'){|file| file.print(".hikirc\n")}
118
- end
119
- rescue
120
- File.open('./.gitignore','w'){|file| file.print(".hikirc\n")}
121
- end
122
- end
123
-
124
- def display(file)
125
- body = HikiDoc.to_html(File.read(file))
126
- source = HTML_TEMPLATE
127
- title = File.basename(file)
128
- erb = ERB.new(source)
129
- t = File.open(file+".html",'w')
130
- t.puts(erb.result(binding))
131
- t.close
132
- system "open #{t.path}"
133
- end
134
-
135
- def euc_file(file)
136
- p file_path = File.join(@l_dir,'text',file)
137
- cont = File.readlines(file_path)
138
- cont.each{|line| puts line.toeuc }
139
- end
140
-
141
- def move_file(files)
142
- begin
143
- p file1_path = File.join(@l_dir,'text',files[0])
144
- p file2_path = File.join(@l_dir,'text',files[1])
145
- rescue => evar
146
- puts evar.to_s
147
- puts "error on move_files, check the input format, especially comma separation."
148
- exit
149
- end
150
- return if file1_path==file2_path
151
- if File.exist?(file2_path) then
152
- print ("moving target #{files[1]} exists.\n")
153
- print ("first remove#{files[1]}.\n")
154
- return
155
- else
156
- File.rename(file1_path,file2_path)
157
- end
158
-
159
- info=InfoDB.new(@l_dir)
160
-
161
- db = info.db
162
-
163
- pp file0=db[files[0]]
164
- db.delete(files[0])
165
- db[files[1]]=file0
166
- db[files[1]][:title]=files[1] if db[files[1]][:title]==files[0]
167
- pp db[files[1]]
168
-
169
- db.each{|ele|
170
- ref = ele[1][:references]
171
- if ref.include?(files[0]) then
172
- p link_file=ele[0]
173
- link_path = File.join(@l_dir,'text',link_file)
174
-
175
- cont = File.read(link_path)
176
- if Kconv.iseuc(cont) then
177
- print "euc\n"
178
- utf8_cont=cont.toutf8
179
- utf8_cont.gsub!(/#{files[0]}/,"#{files[1]}")
180
- cont = utf8_cont.toeuc
181
- else
182
- cont.gsub!(/#{files[0]}/,"#{files[1]}")
183
- end
184
-
185
- File.write(link_path,cont)
186
-
187
- ref.delete(files[0])
188
- ref << files[1]
189
-
190
- p cache_path = File.join(@l_dir,'cache/parser',link_file)
191
- begin
192
- File.delete(cache_path)
193
- rescue => evar
194
- puts evar.to_s
195
- end
196
- end
197
- }
198
-
199
- info.dump
200
- end
201
-
202
- def remove_file(file_name)
203
- p text_path = File.join(@l_dir,'text',file_name)
204
- p attach_path = File.join(@l_dir,'cache/attach',file_name)
205
- begin
206
- File.delete(text_path)
207
- rescue => evar
208
- puts evar.to_s
209
- end
210
- begin
211
- Dir.rmdir(attach_path)
212
- rescue => evar
213
- puts evar.to_s
214
- end
215
-
216
- info=InfoDB.new(@l_dir)
217
- p "delete "
218
- del_file=info.delete(file_name)
219
- info.show_link(file_name)
220
- info.dump
221
- end
222
-
223
- def check_db
224
- result= InfoDB.new(@l_dir).show_inconsist
225
- print (result=='') ? "db agrees with text dir.\n" : result
226
- end
227
-
228
- def db_file(file_name)
229
- info=InfoDB.new(@l_dir)
230
- p info.show(file_name)
231
- end
232
-
233
- def rsync_files
234
- p local = @l_dir
235
- p global = @src[:srcs][@target][:global_dir]
236
- #"/Users/bob/Sites/nishitani0/Internal/data"
237
- #"bob@dmz0:/Users/bob/nishitani0/Internal/data"
238
- # p command="rsync -auvz -e ssh #{local}/ #{global}"
239
- p command="rsync -auvz -e ssh #{local}/ #{global}"
240
- # system 'rsync -auvz -e ssh ~/Sites/nishitani0 bob@nishitani0.kwansei.ac.jp:Sites/'
241
- system command
242
- end
243
-
244
- def update_file(file0)
245
- file = (file0==nil) ? 'FrontPage' : file0
246
- #rm cache file
247
- t_file=File.join(@l_dir,'cache/parser',file)
248
- begin
249
- FileUtils.rm(t_file,:verbose=>true)
250
- #update info file
251
- info=InfoDB.new(@l_dir)
252
- info.update(file0)
253
-
254
- rescue
255
- print "some errors on touch, but dont mind...\n"
256
- end
257
-
258
- #open file on browser
259
- l_path = @src[:srcs][@target][:local_uri]
260
- # p command="open -a #{@browser} \'#{l_path}/?c=edit;p=#{file}\'"
261
- p command="open -a #{@browser} \'#{l_path}/?#{file}\'"
262
- system command
263
- p "If you get open error, try rackup from the src_dir."
264
- p "If you get 整形式になっていません, try login as a valid user."
265
- end
266
-
267
- def list_files(file)
268
- file ='' if file==nil
269
- t_file=File.join(@l_dir,'text')
270
- print "target_dir : "+t_file+"\n"
271
- print `cd #{t_file} ; ls -lt #{file}*`
272
- end
273
-
274
- def edit_file(file)
275
- t_file=File.join(@l_dir,'text',file)
276
- if !File.exist?(t_file) then
277
- file=File.open(t_file,'w')
278
- file.close
279
- File.chmod(0777,t_file)
280
- end
281
- p command="#{@editor_command} #{t_file}"
282
- system command
283
- end
284
-
285
- def dump_sources
286
- file = File.open(DATA_FILE,'w')
287
- YAML.dump(@src, file)
288
- file.close
289
- end
290
-
291
- def set_target(val)
292
- @src[:target] = val.to_i
293
- show_sources
294
- end
295
-
296
- def show_sources()
297
- printf("target_no:%i\n",@src[:target])
298
- printf("editor_command:%s\n",@src[:editor_command])
299
- check_display_size()
300
- header = display_format('id','name','local directory','global uri')
301
-
302
- puts header
303
- puts '-' * header.size
304
-
305
- @src[:srcs].each_with_index{|src,i|
306
- target = i==@src[:target] ? '*':' '
307
- id = target+i.to_s
308
- name=src[:nick_name]
309
- local=src[:local_dir]
310
- global=src[:global_uri]
311
- puts display_format(id,name,local,global)
312
- }
313
-
314
- end
315
-
316
- def check_display_size
317
- @i_size,@n_size,@l_size,@g_size=3,5,30,15 #i,g_size are fixed
318
- n_l,l_l=0,0
319
- @src[:srcs].each_with_index{|src,i|
320
- n_l =(n_l= src[:nick_name].length)>@n_size? n_l:@n_size
321
- l_l =(l_l= src[:local_dir].length)>@l_size? l_l:@l_size
322
- }
323
- @n_size,@l_size=n_l,l_l
324
- end
325
-
326
- def display_format(id, name, local, global)
327
- name_length = @n_size-full_width_count(name)
328
- local_length = @l_size-full_width_count(local)
329
- global_string= global.size < @g_size ? global : global[0..@g_size]
330
- [id.to_s.rjust(@i_size), name.ljust(name_length),
331
- local.ljust(local_length),
332
- global_string.ljust(@g_size)].join(' | ')
333
- end
334
-
335
- def full_width_count(string)
336
- string.each_char.select{|char| !(/[ -~。-゚]/.match(char))}.count
337
- end
338
-
339
- def add_sources
340
- cont = {}
341
- @data_name.each{|name|
342
- printf("%s ? ", name)
343
- tmp = gets.chomp
344
- cont[name.to_sym] = tmp
345
- }
346
- @src[:srcs] << cont
347
- show_sources
348
- end
349
-
350
- def read_sources
351
- file = File.open(DATA_FILE,'r')
352
- @src = YAML.load(file.read)
353
- file.close
354
- @target = @src[:target]
355
- @l_dir=@src[:srcs][@target][:local_dir]
356
- browser = @src[:browser]
357
- @browser = (browser==nil) ? 'firefox' : browser
358
- p editor_command = @src[:editor_command]
359
- @editor_command = (editor_command==nil) ? 'open -a mi' : editor_command
360
- end
361
- end
362
- end
363
-
364
- module DataFiles
365
- def self.prepare(data_path)
366
- create_file_if_not_exists(data_path)
367
- end
368
-
369
- def self.create_file_if_not_exists(data_path)
370
- return if File::exists?(data_path)
371
- create_data_file(data_path)
372
- end
373
-
374
- def self.create_data_file(data_path)
375
- print "make #{data_path}\n"
376
- init_data_file(data_path)
377
- end
378
-
379
- # initialize source file by dummy data
380
- def self.init_data_file(data_path)
381
- @src = {:target => 0, :editor_command => 'open -a mi',
382
- :srcs=>[{:nick_name => 'hoge', :local_dir => 'hogehoge', :local_uri => 'http://localhost/~hoge',
383
- :global_dir => 'hoge@global_host:/hoge', :global_uri => 'http://hoge'}]}
384
- file = File.open(data_path,'w')
385
- YAML.dump(@src,file)
386
- file.close
387
- end
388
- private_class_method :create_file_if_not_exists, :create_data_file, :init_data_file
389
- end