hikiutils 0.2.3.6 → 0.2.3.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/hikiutils.gemspec~ +43 -0
- data/hikiutils_bob/Rakefile +78 -48
- data/hikiutils_bob/figs/hikiutils_bob.pdf +0 -0
- data/hikiutils_bob/hikiutils_bob.hiki +4 -2
- data/hikiutils_bob/latex_dir/hikiutils_bob.log +13 -15
- data/hikiutils_bob/latex_dir/hikiutils_bob.pdf +0 -0
- data/hikiutils_bob/latex_dir/hikiutils_bob.synctex.gz +0 -0
- data/hikiutils_bob/latex_dir/hikiutils_bob.tex +3 -0
- data/hikiutils_bob/latex_dir/hikiutils_bob.toc +1 -1
- data/hikiutils_bob/latex_dir/latex_all).aux +21 -0
- data/hikiutils_bob/latex_dir/latex_all.tex +1 -3
- data/hikiutils_bob/latex_dir/sync).aux +21 -0
- data/hikiutils_bob/latex_dir/sync.aux +1 -1
- data/hikiutils_bob/latex_dir/sync.log +81 -66
- data/hikiutils_bob/latex_dir/sync.pdf +0 -0
- data/hikiutils_bob/latex_dir/sync.synctex.gz +0 -0
- data/hikiutils_bob/latex_dir/sync.tex +3 -3
- data/hikiutils_bob/latex_dir/sync.toc +17 -0
- data/hikiutils_bob/sync.hiki +5 -3
- data/hikiutils_yamane/Rakefile +62 -23
- data/hikiutils_yamane/clidescription.hiki +35 -0
- data/hikiutils_yamane/code.hiki +285 -0
- data/hikiutils_yamane/compare.hiki +309 -0
- data/hikiutils_yamane/figs/hikiutils_yamane_09_copy.001.jpg +0 -0
- data/hikiutils_yamane/figs/hikiutils_yamane_09_copy.002.jpg +0 -0
- data/hikiutils_yamane/figs/hikiutils_yamane_09_copy.003.jpg +0 -0
- data/hikiutils_yamane/figs/hikiutils_yamane_09_copy.004.jpg +0 -0
- data/hikiutils_yamane/figs/hikiutils_yamane_09_copy.005.jpg +0 -0
- data/hikiutils_yamane/figs/hikiutils_yamane_09_copy.006.jpg +0 -0
- data/hikiutils_yamane/figs/hikiutils_yamane_09_copy.007.jpg +0 -0
- data/hikiutils_yamane/hikiutils_yamane.hiki +15 -23
- data/hikiutils_yamane/hikiutils_yamane_09 /343/201/256/343/202/263/343/203/222/343/202/232/343/203/274/hikiutils_yamane_09 /343/201/256/343/202/263/343/203/222/343/202/232/343/203/274.001.jpg +0 -0
- data/hikiutils_yamane/hikiutils_yamane_09 /343/201/256/343/202/263/343/203/222/343/202/232/343/203/274/hikiutils_yamane_09 /343/201/256/343/202/263/343/203/222/343/202/232/343/203/274.002.jpg +0 -0
- data/hikiutils_yamane/hikiutils_yamane_09 /343/201/256/343/202/263/343/203/222/343/202/232/343/203/274/hikiutils_yamane_09 /343/201/256/343/202/263/343/203/222/343/202/232/343/203/274.003.jpg +0 -0
- data/hikiutils_yamane/hikiutils_yamane_09 /343/201/256/343/202/263/343/203/222/343/202/232/343/203/274/hikiutils_yamane_09 /343/201/256/343/202/263/343/203/222/343/202/232/343/203/274.004.jpg +0 -0
- data/hikiutils_yamane/hikiutils_yamane_09 /343/201/256/343/202/263/343/203/222/343/202/232/343/203/274/hikiutils_yamane_09 /343/201/256/343/202/263/343/203/222/343/202/232/343/203/274.005.jpg +0 -0
- data/hikiutils_yamane/hikiutils_yamane_09 /343/201/256/343/202/263/343/203/222/343/202/232/343/203/274/hikiutils_yamane_09 /343/201/256/343/202/263/343/203/222/343/202/232/343/203/274.006.jpg +0 -0
- data/hikiutils_yamane/hikiutils_yamane_09 /343/201/256/343/202/263/343/203/222/343/202/232/343/203/274/hikiutils_yamane_09 /343/201/256/343/202/263/343/203/222/343/202/232/343/203/274.007.jpg +0 -0
- data/hikiutils_yamane/hikiutils_yamane_09 /343/201/256/343/202/263/343/203/224/343/203/274/hikiutils_yamane_09 /343/201/256/343/202/263/343/203/224/343/203/274.001.jpg +0 -0
- data/hikiutils_yamane/hikiutils_yamane_09 /343/201/256/343/202/263/343/203/224/343/203/274/hikiutils_yamane_09 /343/201/256/343/202/263/343/203/224/343/203/274.002.jpg +0 -0
- data/hikiutils_yamane/hikiutils_yamane_09 /343/201/256/343/202/263/343/203/224/343/203/274/hikiutils_yamane_09 /343/201/256/343/202/263/343/203/224/343/203/274.003.jpg +0 -0
- data/hikiutils_yamane/hikiutils_yamane_09 /343/201/256/343/202/263/343/203/224/343/203/274/hikiutils_yamane_09 /343/201/256/343/202/263/343/203/224/343/203/274.004.jpg +0 -0
- data/hikiutils_yamane/hikiutils_yamane_09 /343/201/256/343/202/263/343/203/224/343/203/274/hikiutils_yamane_09 /343/201/256/343/202/263/343/203/224/343/203/274.005.jpg +0 -0
- data/hikiutils_yamane/hikiutils_yamane_09 /343/201/256/343/202/263/343/203/224/343/203/274/hikiutils_yamane_09 /343/201/256/343/202/263/343/203/224/343/203/274.006.jpg +0 -0
- data/hikiutils_yamane/hikiutils_yamane_09 /343/201/256/343/202/263/343/203/224/343/203/274/hikiutils_yamane_09 /343/201/256/343/202/263/343/203/224/343/203/274.007.jpg +0 -0
- data/hikiutils_yamane/hikiutils_yamane_09.key +0 -0
- data/hikiutils_yamane/hikiutils_yamane_09_copy.key/Data/110809_FamilyChineseOahu_EN_00317_2040x1360-small-12.jpg +0 -0
- data/hikiutils_yamane/hikiutils_yamane_09_copy.key/Data/110809_FamilyChineseOahu_EN_02016_981x654-small-14.jpg +0 -0
- data/hikiutils_yamane/hikiutils_yamane_09_copy.key/Data/110809_familychineseoahu_en_00317_2040x1360-96.jpeg +0 -0
- data/hikiutils_yamane/hikiutils_yamane_09_copy.key/Data/110809_familychineseoahu_en_02016_981x654-97.jpeg +0 -0
- data/hikiutils_yamane/hikiutils_yamane_09_copy.key/Data/110809_familychineseoahu_en_02390_2880x1921-94.jpeg +0 -0
- data/hikiutils_yamane/hikiutils_yamane_09_copy.key/Data/110809_familychineseoahu_en_02390_2880x1921-small-95.jpg +0 -0
- data/hikiutils_yamane/hikiutils_yamane_09_copy.key/Data/mt0@2x-102.jpg +0 -0
- data/hikiutils_yamane/hikiutils_yamane_09_copy.key/Data/mt10@2x-112.jpg +0 -0
- data/hikiutils_yamane/hikiutils_yamane_09_copy.key/Data/mt1@2x-103.jpg +0 -0
- data/hikiutils_yamane/hikiutils_yamane_09_copy.key/Data/mt2@2x-104.jpg +0 -0
- data/hikiutils_yamane/hikiutils_yamane_09_copy.key/Data/mt3@2x-105.jpg +0 -0
- data/hikiutils_yamane/hikiutils_yamane_09_copy.key/Data/mt4@2x-106.jpg +0 -0
- data/hikiutils_yamane/hikiutils_yamane_09_copy.key/Data/mt5@2x-107.jpg +0 -0
- data/hikiutils_yamane/hikiutils_yamane_09_copy.key/Data/mt6@2x-108.jpg +0 -0
- data/hikiutils_yamane/hikiutils_yamane_09_copy.key/Data/mt7@2x-109.jpg +0 -0
- data/hikiutils_yamane/hikiutils_yamane_09_copy.key/Data/mt8@2x-110.jpg +0 -0
- data/hikiutils_yamane/hikiutils_yamane_09_copy.key/Data/mt9@2x-111.jpg +0 -0
- data/hikiutils_yamane/hikiutils_yamane_09_copy.key/Data/pasted-image-100.tiff +0 -0
- data/hikiutils_yamane/hikiutils_yamane_09_copy.key/Data/pasted-image-98.tiff +0 -0
- data/hikiutils_yamane/hikiutils_yamane_09_copy.key/Data/pasted-image-small-101.png +0 -0
- data/hikiutils_yamane/hikiutils_yamane_09_copy.key/Data/pasted-image-small-99.png +0 -0
- data/hikiutils_yamane/hikiutils_yamane_09_copy.key/Data/st0-113.jpg +0 -0
- data/hikiutils_yamane/hikiutils_yamane_09_copy.key/Data/st1-114.jpg +0 -0
- data/hikiutils_yamane/hikiutils_yamane_09_copy.key/Data/st2-115.jpg +0 -0
- data/hikiutils_yamane/hikiutils_yamane_09_copy.key/Data/st3-116.jpg +0 -0
- data/hikiutils_yamane/hikiutils_yamane_09_copy.key/Data/st4-117.jpg +0 -0
- data/hikiutils_yamane/hikiutils_yamane_09_copy.key/Data/st5-118.jpg +0 -0
- data/hikiutils_yamane/hikiutils_yamane_09_copy.key/Data/st6-119.jpg +0 -0
- data/hikiutils_yamane/hikiutils_yamane_09_copy.key/Data/tile_paper_medgray-93.jpg +0 -0
- data/hikiutils_yamane/hikiutils_yamane_09_copy.key/Index.zip +0 -0
- data/hikiutils_yamane/hikiutils_yamane_09_copy.key/Metadata/BuildVersionHistory.plist +8 -0
- data/hikiutils_yamane/hikiutils_yamane_09_copy.key/Metadata/DocumentIdentifier +1 -0
- data/hikiutils_yamane/hikiutils_yamane_09_copy.key/Metadata/Properties.plist +0 -0
- data/hikiutils_yamane/hikiutils_yamane_09_copy.key/preview-micro.jpg +0 -0
- data/hikiutils_yamane/hikiutils_yamane_09_copy.key/preview-web.jpg +0 -0
- data/hikiutils_yamane/hikiutils_yamane_09_copy.key/preview.jpg +0 -0
- data/hikiutils_yamane/hikiutils_yamane_09_copy/hikiutils_yamane_09_copy.001.jpg +0 -0
- data/hikiutils_yamane/hikiutils_yamane_09_copy/hikiutils_yamane_09_copy.002.jpg +0 -0
- data/hikiutils_yamane/hikiutils_yamane_09_copy/hikiutils_yamane_09_copy.003.jpg +0 -0
- data/hikiutils_yamane/hikiutils_yamane_09_copy/hikiutils_yamane_09_copy.004.jpg +0 -0
- data/hikiutils_yamane/hikiutils_yamane_09_copy/hikiutils_yamane_09_copy.005.jpg +0 -0
- data/hikiutils_yamane/hikiutils_yamane_09_copy/hikiutils_yamane_09_copy.006.jpg +0 -0
- data/hikiutils_yamane/hikiutils_yamane_09_copy/hikiutils_yamane_09_copy.007.jpg +0 -0
- data/hikiutils_yamane/latex_dir/abstract.aux +2 -2
- data/hikiutils_yamane/latex_dir/clidescription.aux +25 -0
- data/hikiutils_yamane/latex_dir/clidescription.tex +42 -0
- data/hikiutils_yamane/latex_dir/code.aux +41 -0
- data/hikiutils_yamane/latex_dir/code.tex +319 -0
- data/hikiutils_yamane/latex_dir/compare.aux +40 -0
- data/hikiutils_yamane/latex_dir/compare.tex +351 -0
- data/hikiutils_yamane/latex_dir/head.tex +1 -0
- data/hikiutils_yamane/latex_dir/hikiutils_yamane.aux +8 -0
- data/hikiutils_yamane/latex_dir/hikiutils_yamane.log +159 -63
- data/hikiutils_yamane/latex_dir/hikiutils_yamane.pdf +0 -0
- data/hikiutils_yamane/latex_dir/hikiutils_yamane.synctex.gz +0 -0
- data/hikiutils_yamane/latex_dir/hikiutils_yamane.tex +16 -10
- data/hikiutils_yamane/latex_dir/hikiutils_yamane.toc +48 -20
- data/hikiutils_yamane/latex_dir/introduction.aux +7 -7
- data/hikiutils_yamane/latex_dir/purpose.aux +25 -0
- data/hikiutils_yamane/latex_dir/purpose.tex +21 -0
- data/hikiutils_yamane/latex_dir/results.aux +22 -31
- data/hikiutils_yamane/latex_dir/results.tex +100 -318
- data/hikiutils_yamane/mi +0 -0
- data/hikiutils_yamane/purpose.hiki +18 -0
- data/hikiutils_yamane/results.hiki +11 -277
- data/lib/hikiutils/version.rb +1 -1
- data/lib/templates/Rakefile_hiki_sync +56 -20
- data/lib/templates/head.tex +1 -0
- metadata +84 -3
- data/hikiutils_yamane/hikiutils_yamane.key~11b9dba1272d2104b420497d11c6eda206ace6c2 +0 -0
|
Binary file
|
|
Binary file
|
|
@@ -43,20 +43,26 @@
|
|
|
43
43
|
\date{\vspace{3cm} 2017年 3月\\
|
|
44
44
|
\vspace{3cm} 指導教員 西谷 滋人 教授}
|
|
45
45
|
\maketitle
|
|
46
|
+
\setcounter{tocdepth}{6}
|
|
46
47
|
\tableofcontents
|
|
47
48
|
|
|
48
|
-
\title{コマンドラインツール作成ライブラリThorによるhikiutilsの書き換え}
|
|
49
|
-
\author{関西学院大学理工学部情報科学科 27013554 山根亮太}
|
|
50
|
-
\date{}
|
|
51
|
-
\maketitle
|
|
52
49
|
\tableofcontents
|
|
53
50
|
\include{abstract}
|
|
51
|
+
\section{序論}
|
|
54
52
|
\include{introduction}
|
|
53
|
+
\include{purpose}
|
|
54
|
+
\section{方法}
|
|
55
|
+
\section{結果}
|
|
55
56
|
\include{results}
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
[
|
|
61
|
-
|
|
57
|
+
\include{compare}
|
|
58
|
+
\include{clidescription}
|
|
59
|
+
\include{code}
|
|
60
|
+
\section{参考文献}
|
|
61
|
+
[1-1] hikidoc, \verb|https://rubygems.org/gems/hikidoc/versions/0.1.0,| \verb|https://github.com/hiki/hikidoc,2017/1/30| アクセス.
|
|
62
|
+
|
|
63
|
+
[1-2] 「Thorの使い方まとめ」, \verb|http://qiita.com/succi0303/items/32560103190436c9435b| ,2017/1/30 アクセス.
|
|
64
|
+
|
|
65
|
+
[1-3] 「15.5. optparse - コマンドラインオプション解析器」, \verb|http://docs.python.jp/2/library/optparse.html| ,2017/1/30 アクセス.
|
|
66
|
+
|
|
67
|
+
[1-4] 「library optparse」, \verb|https://docs.ruby-lang.org/ja/latest/library/optparse.html| ,2017/1/30 アクセス.
|
|
62
68
|
\end{document}
|
|
@@ -1,20 +1,48 @@
|
|
|
1
|
-
\contentsline {section}{\numberline {1}概要}{
|
|
2
|
-
\contentsline {section}{\numberline {2}序論}{
|
|
3
|
-
\contentsline {
|
|
4
|
-
\contentsline {subsection}{\numberline {
|
|
5
|
-
\contentsline {
|
|
6
|
-
\contentsline {subsubsection}{\numberline {
|
|
7
|
-
\contentsline {
|
|
8
|
-
\contentsline {
|
|
9
|
-
\contentsline {
|
|
10
|
-
\contentsline {
|
|
11
|
-
\contentsline {
|
|
12
|
-
\contentsline {
|
|
13
|
-
\contentsline {
|
|
14
|
-
\contentsline {
|
|
15
|
-
\contentsline {paragraph}{
|
|
16
|
-
\contentsline {paragraph}{
|
|
17
|
-
\contentsline {paragraph}{
|
|
18
|
-
\contentsline {paragraph}{
|
|
19
|
-
\contentsline {paragraph}{
|
|
20
|
-
\contentsline {paragraph}{
|
|
1
|
+
\contentsline {section}{\numberline {1}概要}{4}
|
|
2
|
+
\contentsline {section}{\numberline {2}序論}{5}
|
|
3
|
+
\contentsline {section}{\numberline {3}序論}{6}
|
|
4
|
+
\contentsline {subsection}{\numberline {3.1}目的}{6}
|
|
5
|
+
\contentsline {subsection}{\numberline {3.2}既存システムの背景}{6}
|
|
6
|
+
\contentsline {subsubsection}{\numberline {3.2.1}hiki}{6}
|
|
7
|
+
\contentsline {subsubsection}{\numberline {3.2.2}hikiutils}{6}
|
|
8
|
+
\contentsline {subsubsection}{\numberline {3.2.3}目的}{8}
|
|
9
|
+
\contentsline {subsubsection}{\numberline {3.2.4}既存システムの説明}{8}
|
|
10
|
+
\contentsline {section}{\numberline {4}方法}{10}
|
|
11
|
+
\contentsline {section}{\numberline {5}結果}{10}
|
|
12
|
+
\contentsline {subsection}{\numberline {5.1}結果}{11}
|
|
13
|
+
\contentsline {subsubsection}{\numberline {5.1.1}コマンド名の検討}{11}
|
|
14
|
+
\contentsline {paragraph}{コマンドの命名原則}{11}
|
|
15
|
+
\contentsline {paragraph}{hikiutilsがあらかじめ想定している利用形態}{11}
|
|
16
|
+
\contentsline {paragraph}{コメンド名と振る舞いの詳細}{13}
|
|
17
|
+
\contentsline {paragraph}{open FILE}{14}
|
|
18
|
+
\contentsline {paragraph}{ls [FILE]}{14}
|
|
19
|
+
\contentsline {paragraph}{rsync}{14}
|
|
20
|
+
\contentsline {paragraph}{touch FILE}{14}
|
|
21
|
+
\contentsline {paragraph}{pwd}{14}
|
|
22
|
+
\contentsline {paragraph}{cd VAL}{14}
|
|
23
|
+
\contentsline {subsubsection}{\numberline {5.1.2}thor と optparse のコードの比較}{15}
|
|
24
|
+
\contentsline {paragraph}{Thorとoptparseとは}{15}
|
|
25
|
+
\contentsline {paragraph}{Thorとは}{15}
|
|
26
|
+
\contentsline {paragraph}{optparseとは}{15}
|
|
27
|
+
\contentsline {paragraph}{コードの解説}{16}
|
|
28
|
+
\contentsline {paragraph}{Thorの定義}{16}
|
|
29
|
+
\contentsline {paragraph}{実際のコード}{16}
|
|
30
|
+
\contentsline {paragraph}{hikiutilsの実行}{17}
|
|
31
|
+
\contentsline {paragraph}{実際のコード}{18}
|
|
32
|
+
\contentsline {paragraph}{コマンドの表示と処理}{21}
|
|
33
|
+
\contentsline {paragraph}{実際のコード}{22}
|
|
34
|
+
\contentsline {subsubsection}{\numberline {5.1.3}CLIのコード}{26}
|
|
35
|
+
\contentsline {paragraph}{CLIの解説}{26}
|
|
36
|
+
\contentsline {paragraph}{Thor}{26}
|
|
37
|
+
\contentsline {paragraph}{optparse}{26}
|
|
38
|
+
\contentsline {subsubsection}{\numberline {5.1.4}Thorの初期化}{28}
|
|
39
|
+
\contentsline {paragraph}{コード}{28}
|
|
40
|
+
\contentsline {subsubsection}{\numberline {5.1.5}コマンド表示と処理}{29}
|
|
41
|
+
\contentsline {paragraph}{Thor}{29}
|
|
42
|
+
\contentsline {paragraph}{optparse}{30}
|
|
43
|
+
\contentsline {paragraph}{コード}{31}
|
|
44
|
+
\contentsline {subsubsection}{\numberline {5.1.6}CLIの実行}{34}
|
|
45
|
+
\contentsline {paragraph}{Thor}{34}
|
|
46
|
+
\contentsline {paragraph}{optparse}{35}
|
|
47
|
+
\contentsline {paragraph}{コード}{35}
|
|
48
|
+
\contentsline {section}{\numberline {6}参考文献}{39}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
\relax
|
|
2
|
-
\@writefile{toc}{\contentsline {section}{\numberline {
|
|
3
|
-
\@writefile{toc}{\contentsline {subsection}{\numberline {
|
|
4
|
-
\@writefile{toc}{\contentsline {subsection}{\numberline {
|
|
5
|
-
\@writefile{toc}{\contentsline {subsubsection}{\numberline {
|
|
6
|
-
\@writefile{toc}{\contentsline {subsubsection}{\numberline {
|
|
2
|
+
\@writefile{toc}{\contentsline {section}{\numberline {3}序論}{6}}
|
|
3
|
+
\@writefile{toc}{\contentsline {subsection}{\numberline {3.1}目的}{6}}
|
|
4
|
+
\@writefile{toc}{\contentsline {subsection}{\numberline {3.2}既存システムの背景}{6}}
|
|
5
|
+
\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.2.1}hiki}{6}}
|
|
6
|
+
\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.2.2}hikiutils}{6}}
|
|
7
7
|
\@setckpt{introduction}{
|
|
8
|
-
\setcounter{page}{
|
|
8
|
+
\setcounter{page}{8}
|
|
9
9
|
\setcounter{equation}{0}
|
|
10
10
|
\setcounter{enumi}{0}
|
|
11
11
|
\setcounter{enumii}{0}
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
\setcounter{footnote}{0}
|
|
15
15
|
\setcounter{mpfootnote}{0}
|
|
16
16
|
\setcounter{part}{0}
|
|
17
|
-
\setcounter{section}{
|
|
17
|
+
\setcounter{section}{3}
|
|
18
18
|
\setcounter{subsection}{2}
|
|
19
19
|
\setcounter{subsubsection}{2}
|
|
20
20
|
\setcounter{paragraph}{0}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
\relax
|
|
2
|
+
\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.2.3}目的}{8}}
|
|
3
|
+
\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.2.4}既存システムの説明}{8}}
|
|
4
|
+
\@writefile{lof}{\contentsline {figure}{\numberline {1}{\ignorespaces hiki web systemとhiki systemの対応関係.}}{8}}
|
|
5
|
+
\newlabel{default}{{1}{8}}
|
|
6
|
+
\@setckpt{purpose}{
|
|
7
|
+
\setcounter{page}{10}
|
|
8
|
+
\setcounter{equation}{0}
|
|
9
|
+
\setcounter{enumi}{0}
|
|
10
|
+
\setcounter{enumii}{0}
|
|
11
|
+
\setcounter{enumiii}{0}
|
|
12
|
+
\setcounter{enumiv}{0}
|
|
13
|
+
\setcounter{footnote}{0}
|
|
14
|
+
\setcounter{mpfootnote}{0}
|
|
15
|
+
\setcounter{part}{0}
|
|
16
|
+
\setcounter{section}{3}
|
|
17
|
+
\setcounter{subsection}{2}
|
|
18
|
+
\setcounter{subsubsection}{4}
|
|
19
|
+
\setcounter{paragraph}{0}
|
|
20
|
+
\setcounter{subparagraph}{0}
|
|
21
|
+
\setcounter{figure}{1}
|
|
22
|
+
\setcounter{table}{0}
|
|
23
|
+
\setcounter{lstnumber}{1}
|
|
24
|
+
\setcounter{lstlisting}{0}
|
|
25
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
\subsubsection{目的}
|
|
2
|
+
本研究ではhikiの編集作業をより容易にするためのツールの開発を行った.
|
|
3
|
+
hikiは通常web上で編集を行っているが,GUIとCUIが混在しており,操作に不便な点がある.
|
|
4
|
+
そこで,編集操作が CUI で完結するために開発をされたのが hikiutils である.
|
|
5
|
+
しかし,そのユーザインタフェースにはコマンドが直感的でないという問題点がある.
|
|
6
|
+
そこで,Thorというコマンドラインツール作成ライブラリを用いる.
|
|
7
|
+
optparseというコマンドライン解析ライブラリを使用しているhikiutilsを新たなコマンドライン解析ライブラリを使用することコマンドを書き換え,より直感的なコマンドにして使いやすくする.
|
|
8
|
+
|
|
9
|
+
\subsubsection{既存システムの説明}
|
|
10
|
+
図に従ってhiki systemの動作概要を説明する.
|
|
11
|
+
|
|
12
|
+
\begin{figure}[htbp]\begin{center}
|
|
13
|
+
\includegraphics[width=6cm,bb=0 0 442 500]{../figs/./hikiutils_yamane_09_copy.001.jpg}
|
|
14
|
+
\caption{hiki web systemとhiki systemの対応関係.}
|
|
15
|
+
\label{default}\end{center}\end{figure}
|
|
16
|
+
hikiは,hiki記法を用いたwiki cloneです.wikiはウォード・カニンガムが作ったwikiwikiwebを源流とするhome page制作を容易にするシステムで,hikiもwikiの基本要求仕様を満足するシステムを提供しています.wikiの特徴であるweb上で編集する機能を提供しています.これを便宜上hiki web systemと呼びます.図にある通り,一般的な表示画面の他に,編集画面が提供されており,ユーザーはこの編集画面からコンテンツを編集することが可能です.リンクやヘッダー,リスト,引用,表,図の表示などの基本テキストフォーマットが用意されています.
|
|
17
|
+
|
|
18
|
+
hiki web systemの実際の基本動作は,hiki.cgiプログラムを介して行われています.こちらを便宜上hiki systemと呼びます.hiki systemは,data/textに置かれた書かれたプレーンテキストをhtmlへ変換します.この変換はhikidoc[1-1]というhikiフォーマットconverterを使っています.また,添付書類はcache/attachに,一度フォーマットしたhtmlはparserに置かれており,それらを参照してhtmlを表示する画面をhiki.cgiは作っています.さらにhiki systemでは検索機能,自動リンク作成などが提供されています
|
|
19
|
+
|
|
20
|
+
研究室内の内部文書,あるいは外部への宣伝資料,さらにwikipediaのように重要な研究成果の発信などに西谷研ではこのhiki systemを利用しています.初心者にも覚えやすい直感的な操作です.しかし,慣れてくるとテキスト編集や画面更新にいちいちweb画面へ移行せねばならず,編集の思考が停止します.そこで,テキスト編集に優れたeditorとの連携や,terminal上のshell commandと連携しやすいようにhikiutilsというcli(command line interface)を作成して運用しています.このhikiutilsのコマンドオプションの実装をしなおして,より使いやすくすることが本研究の目的です.
|
|
21
|
+
|
|
@@ -1,45 +1,36 @@
|
|
|
1
1
|
\relax
|
|
2
|
-
\@writefile{toc}{\contentsline {
|
|
3
|
-
\@writefile{toc}{\contentsline {
|
|
4
|
-
\@writefile{
|
|
5
|
-
|
|
6
|
-
\@writefile{
|
|
7
|
-
|
|
8
|
-
\@writefile{toc}{\contentsline {paragraph}{
|
|
9
|
-
\@writefile{
|
|
10
|
-
|
|
11
|
-
\@writefile{toc}{\contentsline {
|
|
12
|
-
\@writefile{toc}{\contentsline {paragraph}{
|
|
13
|
-
\@writefile{
|
|
14
|
-
|
|
15
|
-
\@writefile{toc}{\contentsline {paragraph}{
|
|
16
|
-
\@writefile{toc}{\contentsline {paragraph}{
|
|
17
|
-
\@writefile{lof}{\contentsline {figure}{\numberline {2}{\ignorespaces }}{9}}
|
|
18
|
-
\newlabel{default}{{2}{9}}
|
|
19
|
-
\@writefile{lof}{\contentsline {figure}{\numberline {3}{\ignorespaces }}{10}}
|
|
20
|
-
\newlabel{default}{{3}{10}}
|
|
21
|
-
\@writefile{toc}{\contentsline {paragraph}{実際のコード}{10}}
|
|
22
|
-
\@writefile{toc}{\contentsline {paragraph}{コマンドの表示と実行}{13}}
|
|
23
|
-
\@writefile{lof}{\contentsline {figure}{\numberline {4}{\ignorespaces }}{13}}
|
|
24
|
-
\newlabel{default}{{4}{13}}
|
|
25
|
-
\@writefile{toc}{\contentsline {paragraph}{実際のコード}{14}}
|
|
2
|
+
\@writefile{toc}{\contentsline {subsection}{\numberline {5.1}結果}{11}}
|
|
3
|
+
\@writefile{toc}{\contentsline {subsubsection}{\numberline {5.1.1}コマンド名の検討}{11}}
|
|
4
|
+
\@writefile{toc}{\contentsline {paragraph}{コマンドの命名原則}{11}}
|
|
5
|
+
\@writefile{toc}{\contentsline {paragraph}{hikiutilsがあらかじめ想定している利用形態}{11}}
|
|
6
|
+
\@writefile{lof}{\contentsline {figure}{\numberline {2}{\ignorespaces hikiutilsがあらかじめ想定している利用形態}}{11}}
|
|
7
|
+
\newlabel{default}{{2}{11}}
|
|
8
|
+
\@writefile{toc}{\contentsline {paragraph}{コメンド名と振る舞いの詳細}{13}}
|
|
9
|
+
\@writefile{lot}{\contentsline {table}{\numberline {1}{\ignorespaces }}{13}}
|
|
10
|
+
\newlabel{default}{{1}{13}}
|
|
11
|
+
\@writefile{toc}{\contentsline {paragraph}{open FILE}{14}}
|
|
12
|
+
\@writefile{toc}{\contentsline {paragraph}{ls [FILE]}{14}}
|
|
13
|
+
\@writefile{toc}{\contentsline {paragraph}{rsync}{14}}
|
|
14
|
+
\@writefile{toc}{\contentsline {paragraph}{touch FILE}{14}}
|
|
15
|
+
\@writefile{toc}{\contentsline {paragraph}{pwd}{14}}
|
|
16
|
+
\@writefile{toc}{\contentsline {paragraph}{cd VAL}{14}}
|
|
26
17
|
\@setckpt{results}{
|
|
27
|
-
\setcounter{page}{
|
|
18
|
+
\setcounter{page}{15}
|
|
28
19
|
\setcounter{equation}{0}
|
|
29
|
-
\setcounter{enumi}{
|
|
20
|
+
\setcounter{enumi}{0}
|
|
30
21
|
\setcounter{enumii}{0}
|
|
31
22
|
\setcounter{enumiii}{0}
|
|
32
23
|
\setcounter{enumiv}{0}
|
|
33
24
|
\setcounter{footnote}{0}
|
|
34
25
|
\setcounter{mpfootnote}{0}
|
|
35
26
|
\setcounter{part}{0}
|
|
36
|
-
\setcounter{section}{
|
|
37
|
-
\setcounter{subsection}{
|
|
38
|
-
\setcounter{subsubsection}{
|
|
27
|
+
\setcounter{section}{5}
|
|
28
|
+
\setcounter{subsection}{1}
|
|
29
|
+
\setcounter{subsubsection}{1}
|
|
39
30
|
\setcounter{paragraph}{0}
|
|
40
31
|
\setcounter{subparagraph}{0}
|
|
41
|
-
\setcounter{figure}{
|
|
32
|
+
\setcounter{figure}{2}
|
|
42
33
|
\setcounter{table}{1}
|
|
43
|
-
\setcounter{lstnumber}{
|
|
34
|
+
\setcounter{lstnumber}{12}
|
|
44
35
|
\setcounter{lstlisting}{0}
|
|
45
36
|
}
|
|
@@ -1,26 +1,89 @@
|
|
|
1
|
-
|
|
2
|
-
\subsection{
|
|
3
|
-
|
|
1
|
+
|
|
2
|
+
\subsection{結果}
|
|
3
|
+
\subsubsection{コマンド名の検討}
|
|
4
|
+
\paragraph{コマンドの命名原則}
|
|
5
|
+
機能ごとの動作はコマンドのオプションによって指定されます.
|
|
6
|
+
このオプションにどのような名前をつけるかは,どれだけコマンドを覚えやすいかという
|
|
7
|
+
意味で重要です.コマンドの振る舞いを的確に表す名称をつける必要があります.
|
|
8
|
+
|
|
9
|
+
この振る舞いとしてもっとも受け入れやすいのがshellで用意されているコマンドです.
|
|
10
|
+
pwd, ls, rm, touch, openなどはもっとも直感的に動作がわかるコマンドです.
|
|
11
|
+
hikiutilsの振る舞いを予測できるシェルコマンドと同じ名前でオプションを提供する
|
|
12
|
+
ようにします.
|
|
13
|
+
|
|
14
|
+
\paragraph{hikiutilsがあらかじめ想定している利用形態}
|
|
15
|
+
ここでhikiutilsがあらかじめ想定している利用形態を解説しておきます.
|
|
16
|
+
|
|
17
|
+
\begin{figure}[htbp]\begin{center}
|
|
18
|
+
\includegraphics[width=6cm,bb=0 0 442 500]{../figs/./hikiutils_yamane_09_copy.002.jpg}
|
|
19
|
+
\caption{hikiutilsがあらかじめ想定している利用形態}
|
|
20
|
+
\label{default}\end{center}\end{figure}
|
|
21
|
+
hikiutilsは,
|
|
22
|
+
|
|
23
|
+
\begin{itemize}
|
|
24
|
+
\item local PCとglobal serverとが用意されており,
|
|
25
|
+
\item それらのデータをrsyncで同期する
|
|
26
|
+
\end{itemize}
|
|
27
|
+
ことで動作することを想定しています.これは,ネットに繋がっていないオフラインの状況でも
|
|
28
|
+
テキストなどの編集が可能で,さらに不用意な書き換えを防ぐための機構です.さらに,
|
|
29
|
+
どちらもが何かあった時のバックアップともなって,ミスによる手戻りを防いでいます.
|
|
30
|
+
|
|
31
|
+
これらの設定は,~/.hikircにyaml形式で記述・保存されています.
|
|
32
|
+
\begin{lstlisting}[style=]
|
|
33
|
+
bob% cat ~/.hikirc
|
|
34
|
+
:srcs:
|
|
35
|
+
- :nick_name: new_ist
|
|
36
|
+
:local_dir: "/Users/bob/Sites/new_ist_data/ist_data"
|
|
37
|
+
:local_uri: http://localhost/ist
|
|
38
|
+
:global_dir: nishitani@ist.ksc.kwansei.ac.jp:/home/nishitani/new_ist_data/ist_data
|
|
39
|
+
:global_uri: http://ist.ksc.kwansei.ac.jp/~nishitani/
|
|
40
|
+
- :nick_name: dmz0
|
|
41
|
+
:local_dir: "/Users/bob/Sites/nishitani0/Internal/data"
|
|
42
|
+
:local_uri: http://localhost/~bob/nishitani0/Internal
|
|
43
|
+
:global_dir: bob@dmz0:/Users/bob/Sites/nishitani0/Internal/data
|
|
44
|
+
:global_uri: http://nishitani0.kwansei.ac.jp/~bob/nishitani0/Internal
|
|
45
|
+
\end{lstlisting}
|
|
46
|
+
また,一般的に一人のユーザがいくつものまとまりとしてのlocal-globalペアを
|
|
47
|
+
保持して管理することが普通です.それぞれにnicke\_nameをつけて管理しています.
|
|
48
|
+
\begin{lstlisting}[style=]
|
|
49
|
+
bob% hiki -s
|
|
50
|
+
hikiutils: provide utilities for helping hiki editing.
|
|
51
|
+
"open -a mi"
|
|
52
|
+
target_no:1
|
|
53
|
+
editor_command:open -a mi
|
|
54
|
+
id | name | local directory | global uri
|
|
55
|
+
---------------------------------------------------------------------------------
|
|
56
|
+
0 | new_ist | /Users/bob/Sites/new_ist_data/ist_data | http://ist.ksc.k
|
|
57
|
+
*1 | dmz0 | /Users/bob/Sites/nishitani0/Internal/data | http://nishitani
|
|
58
|
+
2 | ist | /Users/bob/Sites/hiki-data/data | http://ist.ksc.k
|
|
59
|
+
3 | new_maple | /Users/bob/Sites/new_ist_data/maple_hiki_data | http://ist.ksc.k
|
|
60
|
+
\end{lstlisting}
|
|
61
|
+
とすると,それらの一覧と,いまtargetにしているnick\_nameディレクリが表示されます.
|
|
62
|
+
|
|
63
|
+
\paragraph{コメンド名と振る舞いの詳細}
|
|
64
|
+
開発の結果コマンドを以下のように書き換えました.
|
|
65
|
+
上部に記した,特によく使うコマンドに関しては,shellでよく使われるコマンド名と一致するにようにしました.
|
|
4
66
|
|
|
5
67
|
\begin{table}[htbp]\begin{center}
|
|
6
68
|
\caption{}
|
|
7
69
|
\begin{tabular}{llll}
|
|
8
70
|
\hline
|
|
9
|
-
変更前 &変更後
|
|
71
|
+
変更前 &変更後 &動作の解説 \\ \hline
|
|
72
|
+
edit FILE &open &open file \\
|
|
73
|
+
list [FILE] &ls &list files \\
|
|
74
|
+
rsync &rsync &rsync files \\
|
|
75
|
+
update FILE &touch &update file \\
|
|
76
|
+
show &pwd &show nick\_names \\
|
|
77
|
+
target VAL &cd &targetを変える,change directoryとのメタファ \\
|
|
78
|
+
& \\
|
|
79
|
+
move [FILE] &mv &move file \\
|
|
80
|
+
remove [FILE] &rm &remove files \\
|
|
10
81
|
add & &add sources info \\
|
|
11
82
|
checkdb & &check database file \\
|
|
12
83
|
datebase FILE & &read datebase file \\
|
|
13
|
-
display FILE &
|
|
14
|
-
edit FILE &open &open file \\
|
|
84
|
+
display FILE & &display converted hikifile \\
|
|
15
85
|
euc FILE & &translate file to euc \\
|
|
16
86
|
help [COMMAND] & &Describe available commands or one specific command \\
|
|
17
|
-
list [FILE] &ls &list files \\
|
|
18
|
-
move [FILE] &mv| move file \\
|
|
19
|
-
remove [FILE] &rm &remove files \\
|
|
20
|
-
rsync & &rsync files \\
|
|
21
|
-
show & &lsとかぶる. \\
|
|
22
|
-
target VAL &cd &set target id \\
|
|
23
|
-
update FILE &touch &update file \\
|
|
24
87
|
version & &show program version \\
|
|
25
88
|
\hline
|
|
26
89
|
\end{tabular}
|
|
@@ -28,315 +91,34 @@ version & &show program version \\
|
|
|
28
91
|
\end{center}\end{table}
|
|
29
92
|
%for inserting separate lines, use \hline, \cline{2-3} etc.
|
|
30
93
|
|
|
31
|
-
|
|
32
|
-
また,プログラムのコードもoptparseよりthorのほうが短く書け,簡単にコマンドを作成することができた.
|
|
94
|
+
それぞれの意図を動作の解説として記述しています.
|
|
33
95
|
|
|
34
|
-
\
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
96
|
+
\paragraph{open FILE}
|
|
97
|
+
ファイルを編集のためにeditorでopen.Editorは~/.hikircに
|
|
98
|
+
\begin{quote}\begin{verbatim}
|
|
99
|
+
:editor_command: open -a mi
|
|
100
|
+
\end{verbatim}\end{quote}
|
|
101
|
+
として保存されている.open -a miをemacsなどに適宜変更して使用.
|
|
38
102
|
|
|
39
|
-
\paragraph{
|
|
40
|
-
\
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
\end{enumerate}
|
|
44
|
-
という流れである[4].
|
|
103
|
+
\paragraph{ls [FILE]}
|
|
104
|
+
local\_dirにあるファイル名を[FILE*]として表示.例えば,hikiutils\_yamane以下の拡張子が
|
|
105
|
+
ついたファイルを表示.hikiシステムではtextディレクトリーは階層構造を取ることができない.
|
|
106
|
+
西谷研ではdirectoryの代わりにスネーク表記で階層構造を表している.
|
|
45
107
|
|
|
46
|
-
\
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
108
|
+
\paragraph{rsync}
|
|
109
|
+
local\_dirの内容をglobal\_dirにrsyncする.逆方向は同期に誤差が生じたり,permissionが
|
|
110
|
+
おかしくなるので,現在のところ一方向の同期のみとしている.したがって,作業手順としては
|
|
111
|
+
テキストの変更はlocal\_dirで読み行うようにしている.
|
|
50
112
|
|
|
51
|
-
\paragraph{
|
|
52
|
-
\
|
|
53
|
-
|
|
54
|
-
\item オプションを取り扱うブロックをoptに登録する
|
|
55
|
-
\item opt.parse(ARGV)でコマンドラインを実際にparseする
|
|
56
|
-
\end{enumerate}
|
|
57
|
-
という流れである[6].
|
|
113
|
+
\paragraph{touch FILE}
|
|
114
|
+
loccal\_dirで書き換えたFILEの内容をlocal\_uriに反映させ,ブラウザで表示.シェルコマンドの
|
|
115
|
+
touchによって,変更時間を現在に変え,最新状態とするのに似せてコマンド名をtouchとしている.
|
|
58
116
|
|
|
59
|
-
\
|
|
60
|
-
\
|
|
61
|
-
|
|
62
|
-
\includegraphics[width=6cm,bb=0 0 442 500]{../figs/./hikiutils_yamane.003.jpg}
|
|
63
|
-
\caption{}
|
|
64
|
-
\label{default}\end{center}\end{figure}
|
|
65
|
-
\begin{enumerate}
|
|
66
|
-
\item Hikithor::CLI.start(ARGV)が呼ばれる
|
|
67
|
-
\item initializeメソッドが呼ばれる
|
|
68
|
-
\item これではThorのinitializeメソッドが呼ばれない
|
|
69
|
-
\item superを書くことでThorのinitializeメソッドが呼ばれる
|
|
70
|
-
\end{enumerate}
|
|
71
|
-
optparseではrequireでoptparseを呼ぶだけでいいが,ThorではrequireでThorを呼びCLIクラスで継承しinitializeメソッドにsuperを書くことでThorのinitializeを呼ぶ必要がある.
|
|
117
|
+
\paragraph{pwd}
|
|
118
|
+
nick\_nameの一覧とtargetを表示,current targetをcurrent dirとみなして,
|
|
119
|
+
コマンド名をpwdとした.
|
|
72
120
|
|
|
73
|
-
\paragraph{
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
require 'kconv'
|
|
77
|
-
require 'hikidoc'
|
|
78
|
-
require 'erb'
|
|
79
|
-
require "hikiutils/version"
|
|
80
|
-
require "hikiutils/tmarshal"
|
|
81
|
-
require "hikiutils/infodb"
|
|
82
|
-
require 'systemu'
|
|
83
|
-
require 'fileutils'
|
|
84
|
-
require 'yaml'
|
|
85
|
-
require 'pp'
|
|
121
|
+
\paragraph{cd VAL}
|
|
122
|
+
targetを変える,change directoryとのメタファ.ただし,いまのところnick\_nameでは
|
|
123
|
+
対応しておらず,nick\_nameの番号をVAL入力することで変更する.
|
|
86
124
|
|
|
87
|
-
module Hikithor
|
|
88
|
-
|
|
89
|
-
DATA_FILE=File.join(ENV['HOME'],'.hikirc')
|
|
90
|
-
attr_accessor :src, :target, :editor_command, :browser, :data_name, :l_dir
|
|
91
|
-
|
|
92
|
-
class CLI < Thor
|
|
93
|
-
def initialize(*args)
|
|
94
|
-
super
|
|
95
|
-
@data_name=['nick_name','local_dir','local_uri','global_dir','global_uri']
|
|
96
|
-
data_path = File.join(ENV['HOME'], '.hikirc')
|
|
97
|
-
DataFiles.prepare(data_path)
|
|
98
|
-
|
|
99
|
-
file = File.open(DATA_FILE,'r')
|
|
100
|
-
@src = YAML.load(file.read)
|
|
101
|
-
file.close
|
|
102
|
-
@target = @src[:target]
|
|
103
|
-
@l_dir=@src[:srcs][@target][:local_dir]
|
|
104
|
-
browser = @src[:browser]
|
|
105
|
-
@browser = (browser==nil) ? 'firefox' : browser
|
|
106
|
-
p editor_command = @src[:editor_command]
|
|
107
|
-
@editor_command = (editor_command==nil) ? 'open -a mi' : editor_command
|
|
108
|
-
end
|
|
109
|
-
\end{lstlisting}
|
|
110
|
-
\paragraph{hikiutilsの実行}
|
|
111
|
-
\begin{itemize}
|
|
112
|
-
\item Thor
|
|
113
|
-
\end{itemize}
|
|
114
|
-
\begin{figure}[htbp]\begin{center}
|
|
115
|
-
\includegraphics[width=6cm,bb=0 0 442 500]{../figs/./hikiutils_yamane.004.jpg}
|
|
116
|
-
\caption{}
|
|
117
|
-
\label{default}\end{center}\end{figure}
|
|
118
|
-
\begin{enumerate}
|
|
119
|
-
\item hiki\_thorのHikithor::CLI.start(ARGV)でhikiutils\_thor.rbのCLIクラスを呼ぶ\verb|{{br}}|
|
|
120
|
-
\item hikiutils\_thor.rbのCLIクラスのメソッドを順に実行していく\verb|{{br}}|
|
|
121
|
-
\end{enumerate}
|
|
122
|
-
\begin{itemize}
|
|
123
|
-
\item optparse
|
|
124
|
-
\end{itemize}
|
|
125
|
-
\begin{figure}[htbp]\begin{center}
|
|
126
|
-
\includegraphics[width=6cm,bb=0 0 442 500]{../figs/./hikiutils_yamane.001.jpg}
|
|
127
|
-
\caption{}
|
|
128
|
-
\label{default}\end{center}\end{figure}
|
|
129
|
-
\begin{enumerate}
|
|
130
|
-
\item HikiのHikiUtils::Command.run(ARGV)でhikiutils.rbのrunメソッドを呼ぶ
|
|
131
|
-
\item new(argv).executeでexecuteメソッドが実行される
|
|
132
|
-
\end{enumerate}
|
|
133
|
-
このようにoptparseでは実行を行うためのメソッドが必要であるが,Thorではクラスのメソッドを順に実行していくため
|
|
134
|
-
runメソッドとexecuteメソッドは必要ない.
|
|
135
|
-
|
|
136
|
-
\paragraph{実際のコード}
|
|
137
|
-
\begin{itemize}
|
|
138
|
-
\item Thor
|
|
139
|
-
\end{itemize}\begin{lstlisting}[style=customRuby]
|
|
140
|
-
#!/usr/bin/env ruby
|
|
141
|
-
|
|
142
|
-
require "hikiutils_thor"
|
|
143
|
-
|
|
144
|
-
Hikithor::CLI.start(ARGV)
|
|
145
|
-
\end{lstlisting}\begin{lstlisting}[style=customRuby]
|
|
146
|
-
# -*- coding: utf-8 -*-
|
|
147
|
-
require 'thor'
|
|
148
|
-
require 'kconv'
|
|
149
|
-
require 'hikidoc'
|
|
150
|
-
require 'erb'
|
|
151
|
-
require "hikiutils/version"
|
|
152
|
-
require "hikiutils/tmarshal"
|
|
153
|
-
require "hikiutils/infodb"
|
|
154
|
-
require 'systemu'
|
|
155
|
-
require 'fileutils'
|
|
156
|
-
require 'yaml'
|
|
157
|
-
require 'pp'
|
|
158
|
-
|
|
159
|
-
module Hikithor
|
|
160
|
-
|
|
161
|
-
DATA_FILE=File.join(ENV['HOME'],'.hikirc')
|
|
162
|
-
attr_accessor :src, :target, :editor_command, :browser, :data_name, :l_dir
|
|
163
|
-
|
|
164
|
-
class CLI < Thor
|
|
165
|
-
def initialize(*args)
|
|
166
|
-
super
|
|
167
|
-
@data_name=['nick_name','local_dir','local_uri','global_dir','global_uri']
|
|
168
|
-
data_path = File.join(ENV['HOME'], '.hikirc')
|
|
169
|
-
DataFiles.prepare(data_path)
|
|
170
|
-
|
|
171
|
-
file = File.open(DATA_FILE,'r')
|
|
172
|
-
@src = YAML.load(file.read)
|
|
173
|
-
file.close
|
|
174
|
-
@target = @src[:target]
|
|
175
|
-
@l_dir=@src[:srcs][@target][:local_dir]
|
|
176
|
-
browser = @src[:browser]
|
|
177
|
-
@browser = (browser==nil) ? 'firefox' : browser
|
|
178
|
-
|
|
179
|
-
\end{lstlisting}
|
|
180
|
-
\begin{itemize}
|
|
181
|
-
\item optparse
|
|
182
|
-
\end{itemize}\begin{lstlisting}[style=customRuby]
|
|
183
|
-
#!/usr/bin/env ruby
|
|
184
|
-
|
|
185
|
-
require "hikiutils"
|
|
186
|
-
|
|
187
|
-
HikiUtils::Command.run(ARGV)
|
|
188
|
-
\end{lstlisting}\begin{lstlisting}[style=customRuby]
|
|
189
|
-
def self.run(argv=[])
|
|
190
|
-
print "hikiutils: provide utilities for helping hiki editing.\n"
|
|
191
|
-
new(argv).execute
|
|
192
|
-
end
|
|
193
|
-
|
|
194
|
-
def execute
|
|
195
|
-
@argv << '--help' if @argv.size==0
|
|
196
|
-
command_parser = OptionParser.new do |opt|
|
|
197
|
-
opt.on('-v', '--version','show program Version.') { |v|
|
|
198
|
-
opt.version = HikiUtils::VERSION
|
|
199
|
-
puts opt.ver
|
|
200
|
-
}
|
|
201
|
-
opt.on('-s', '--show','show sources') {show_sources}
|
|
202
|
-
opt.on('-a', '--add','add sources info') {add_sources }
|
|
203
|
-
opt.on('-t', '--target VAL','set target id') {|val| set_target(val) }
|
|
204
|
-
opt.on('-e', '--edit FILE','open file') {|file| edit_file(file) }
|
|
205
|
-
opt.on('-l', '--list [FILE]','list files') {|file| list_files(file) }
|
|
206
|
-
opt.on('-u', '--update FILE','update file') {|file| update_file(file) }
|
|
207
|
-
opt.on('-r', '--rsync','rsync files') {rsync_files}
|
|
208
|
-
opt.on('--database FILE','read database file') {|file| db_file(file)}
|
|
209
|
-
opt.on('--display FILE','display converted hikifile') {|file| display(f\
|
|
210
|
-
ile)}
|
|
211
|
-
opt.on('-c', '--checkdb','check database file') {check_db}
|
|
212
|
-
opt.on('--remove FILE','remove file') {|file| remove_file(file)}
|
|
213
|
-
opt.on('--move FILES','move file1,file2',Array) {|files| move_file(file\
|
|
214
|
-
s)}
|
|
215
|
-
opt.on('--euc FILE','translate file to euc') {|file| euc_file(file) }
|
|
216
|
-
opt.on('--initialize','initialize source directory') {dir_init() }
|
|
217
|
-
end
|
|
218
|
-
begin
|
|
219
|
-
command_parser.parse!(@argv)
|
|
220
|
-
rescue=> eval
|
|
221
|
-
p eval
|
|
222
|
-
end
|
|
223
|
-
dump_sources
|
|
224
|
-
exit
|
|
225
|
-
end
|
|
226
|
-
\end{lstlisting}
|
|
227
|
-
\paragraph{コマンドの表示と実行}
|
|
228
|
-
\begin{itemize}
|
|
229
|
-
\item Thor
|
|
230
|
-
\end{itemize}
|
|
231
|
-
\begin{figure}[htbp]\begin{center}
|
|
232
|
-
\includegraphics[width=6cm,bb=0 0 442 500]{../figs/./hikiutils_yamane.002.jpg}
|
|
233
|
-
\caption{}
|
|
234
|
-
\label{default}\end{center}\end{figure}
|
|
235
|
-
\begin{enumerate}
|
|
236
|
-
\item コマンド名,コマンドの説明を一覧に表示させる
|
|
237
|
-
\item パブリックメソッドのコマンドを別のコマンド名でも実行できるようにする
|
|
238
|
-
\item コマンドの命令の実行コード
|
|
239
|
-
\end{enumerate}
|
|
240
|
-
\begin{itemize}
|
|
241
|
-
\item optparse
|
|
242
|
-
\end{itemize}
|
|
243
|
-
\verb|{{attach_view(hikiutils_yamane.005.jpg)}}|
|
|
244
|
-
よって,optparseではOptionParserオブジェクトoptを生成を行い,コマンドをoptに登録して一覧に表示するメソッドとそれぞれコマンドの実行処理が書かれたメソッドがあるが,
|
|
245
|
-
thorではそれぞれのdescで一覧を表示しmapとパブリックメソッドでコマンドの実行処理を行うためコードが短くなる.
|
|
246
|
-
|
|
247
|
-
\paragraph{実際のコード}
|
|
248
|
-
\begin{itemize}
|
|
249
|
-
\item Thor
|
|
250
|
-
\end{itemize}\begin{lstlisting}[style=customRuby]
|
|
251
|
-
desc 'show,--show', 'show sources'
|
|
252
|
-
map "--show" => "show"
|
|
253
|
-
def show
|
|
254
|
-
printf("target_no:%i\n",@src[:target])
|
|
255
|
-
printf("editor_command:%s\n",@src[:editor_command])
|
|
256
|
-
@i_size,@n_size,@l_size,@g_size=3,5,30,15 #i,g_size are fixed
|
|
257
|
-
n_l,l_l=0,0
|
|
258
|
-
@src[:srcs].each_with_index{|src,i|
|
|
259
|
-
n_l =(n_l= src[:nick_name].length)>@n_size? n_l:@n_size
|
|
260
|
-
l_l =(l_l= src[:local_dir].length)>@l_size? l_l:@l_size
|
|
261
|
-
}
|
|
262
|
-
@n_size,@l_size=n_l,l_l
|
|
263
|
-
command = Command.new
|
|
264
|
-
header = command.display_format('id','name','local directory','global uri',@i_size,@n_size,@l_size,@g_size)
|
|
265
|
-
|
|
266
|
-
puts header
|
|
267
|
-
puts '-' * header.size
|
|
268
|
-
|
|
269
|
-
@src[:srcs].each_with_index{|src,i|
|
|
270
|
-
target = i==@src[:target] ? '*':' '
|
|
271
|
-
id = target+i.to_s
|
|
272
|
-
name=src[:nick_name]
|
|
273
|
-
local=src[:local_dir]
|
|
274
|
-
global=src[:global_uri]
|
|
275
|
-
puts command.display_format(id,name,local,global,@i_size,@n_size,@l_size,@g_size)
|
|
276
|
-
}
|
|
277
|
-
end
|
|
278
|
-
\end{lstlisting}
|
|
279
|
-
\begin{itemize}
|
|
280
|
-
\item optparse
|
|
281
|
-
\end{itemize}\begin{lstlisting}[style=customRuby]
|
|
282
|
-
def execute
|
|
283
|
-
@argv << '--help' if @argv.size==0
|
|
284
|
-
command_parser = OptionParser.new do |opt|
|
|
285
|
-
opt.on('-v', '--version','show program Version.') { |v|
|
|
286
|
-
opt.version = HikiUtils::VERSION
|
|
287
|
-
puts opt.ver
|
|
288
|
-
}
|
|
289
|
-
opt.on('-s', '--show','show sources') {show_sources}
|
|
290
|
-
opt.on('-a', '--add','add sources info') {add_sources }
|
|
291
|
-
opt.on('-t', '--target VAL','set target id') {|val| set_target(val)}
|
|
292
|
-
opt.on('-e', '--edit FILE','open file') {|file| edit_file(file) }
|
|
293
|
-
opt.on('-l', '--list [FILE]','list files') {|file| list_files(file)}
|
|
294
|
-
opt.on('-u', '--update FILE','update file') {|file| update_file(file) }
|
|
295
|
-
opt.on('-r', '--rsync','rsync files') {rsync_files}
|
|
296
|
-
opt.on('--database FILE','read database file') {|file| db_file(file)}
|
|
297
|
-
opt.on('--display FILE','display converted hikifile') {|file| display(file)}
|
|
298
|
-
opt.on('-c', '--checkdb','check database file') {check_db}
|
|
299
|
-
opt.on('--remove FILE','remove file') {|file| remove_file(file)}
|
|
300
|
-
opt.on('--move FILES','move file1,file2',Array) {|files| move_file(files)}
|
|
301
|
-
opt.on('--euc FILE','translate file to euc') {|file| euc_file(file)}
|
|
302
|
-
opt.on('--initialize','initialize source directory') {dir_init() }
|
|
303
|
-
end
|
|
304
|
-
begin
|
|
305
|
-
command_parser.parse!(@argv)
|
|
306
|
-
rescue=> eval
|
|
307
|
-
p eval
|
|
308
|
-
end
|
|
309
|
-
dump_sources
|
|
310
|
-
exit
|
|
311
|
-
end
|
|
312
|
-
|
|
313
|
-
def show_sources()
|
|
314
|
-
printf("target_no:%i\n",@src[:target])
|
|
315
|
-
printf("editor_command:%s\n",@src[:editor_command])
|
|
316
|
-
check_display_size()
|
|
317
|
-
header = display_format('id','name','local directory','global uri')
|
|
318
|
-
|
|
319
|
-
puts header
|
|
320
|
-
puts '-' * header.size
|
|
321
|
-
|
|
322
|
-
@src[:srcs].each_with_index{|src,i|
|
|
323
|
-
target = i==@src[:target] ? '*':' '
|
|
324
|
-
id = target+i.to_s
|
|
325
|
-
name=src[:nick_name]
|
|
326
|
-
local=src[:local_dir]
|
|
327
|
-
global=src[:global_uri]
|
|
328
|
-
puts display_format(id,name,local,global)
|
|
329
|
-
}
|
|
330
|
-
end
|
|
331
|
-
|
|
332
|
-
def add_sources
|
|
333
|
-
cont = {}
|
|
334
|
-
@data_name.each{|name|
|
|
335
|
-
printf("%s ? ", name)
|
|
336
|
-
tmp = gets.chomp
|
|
337
|
-
cont[name.to_sym] = tmp
|
|
338
|
-
}
|
|
339
|
-
@src[:srcs] << cont
|
|
340
|
-
show_sources
|
|
341
|
-
end
|
|
342
|
-
\end{lstlisting}
|