githelp 0.3.1 → 0.3.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a3bfb96933272505bb5115d478479ffddc11dfe774e1a5ebe29fd3bb654c5759
4
- data.tar.gz: fdc29f2a8653af0c840aa012d11c2498a2b74b14f9b95e5f9a4f436fe08b4dab
3
+ metadata.gz: 1865f038396b4a5c7feebef8182b88b141b138455fc5b1cad6f7fa92633f21e6
4
+ data.tar.gz: a4c4df507a1145d696301ab0a76af4ff9d8e68424c71ee780f53955be9bced55
5
5
  SHA512:
6
- metadata.gz: 9ccc19ef69c5fa8b87a1056b0a4e6e55c82d492f633dcc69012051f83d6259382808f8ab3634e2cd237f84be55b8fc6e7ea645f66dd25db3ed85f56940200174
7
- data.tar.gz: db455bb525f4c0ea01e3b19cdc6c5ba1f3ec993a6d75a76357ed0b860f4e24daa9d15cb34adeb0bc6dc30d7e822ee9301dcf17fff5f91cab956512102be2b329
6
+ metadata.gz: ca1ca93ef1da538ba8de3098e2d716277db6cb53b87f76f64653ee7c4250dcba9dba6dd73fe4830d3ceb1280a07086a859b4234d4a61eec9c8b3b138ddb9d8c4
7
+ data.tar.gz: 165fefcbf26201b25a4089eb4c5ed17638fa5652f9e9e05824112a99ca2a7c91884cafe0122a40be7957e3fc7f3f999df90272989c0b175a2b0393ec10b4da28
data/Makefile CHANGED
@@ -1,3 +1,4 @@
1
+ .PHONY: test
1
2
  data:
2
3
  githelp -u
3
4
 
@@ -9,3 +10,6 @@ install:
9
10
 
10
11
  release:
11
12
  rake release
13
+
14
+ test:
15
+ rake test
data/README.md CHANGED
@@ -1,13 +1,148 @@
1
- <h1>GitHelp</h1>
1
+ <h2>GitHelp</h2>
2
2
 
3
3
  <ul>
4
- <li>古いものは<a href="https://github.com/masui/GitHelp_old">こちら</a></li>
4
+ <li>Gitのコマンドの使いこなしを支援</li>
5
+ <li>詳細は<a href="https://masui.github.io/GitHelp/">こちら</a>
6
+ </li>
7
+
8
+ <!--
9
+
10
+ <h3>概要</h3>
11
+
12
+ Gitのような複雑なシステムは使い方がわからなくて難しい。
13
+ ある程度使い方を知っている場合でも
14
+ あまり標準的でない操作は難しい。
15
+ たとえば以下のような場合は
16
+ どういうコマンドを使えばいいだろうか?
17
+
18
+ <ul>
19
+ <li><code>README.md</code>は3日前からどう変わった?</li>
20
+ <li>2バージョン前の<code>README.md</code>を見たい</li>
21
+ <li><code>package.json</code>に<code>coffee</code>という名前が入ったのはいつ?</li>
22
+ <li>ここ1週間ぐらい変更されてないファイルは?</li>
23
+ <li>最近最も大量に修正したファイルはどれだっけ?</li>
5
24
  </ul>
6
25
 
7
- <h2>使いかた</h2>
26
+ 複雑なシステムにはヘルプやマニュアルが用意されているものだし、
27
+ FAQや逆引き辞典が用意されていることもあるし、
28
+ 答がWebでみつかることもあるが、
29
+ うまく検索できないことも多いし、
30
+ やり方がわかった場合でも
31
+ キーワードやパラメタを指定して実行しなおす必要があるので手間がかかる。
32
+ 作成者側から見ると
33
+ ヘルプ/マニュアル/逆引きなどは別々に作成しなければならないのが普通である。
34
+ <b>このような問題を
35
+ Scrapbox
36
+
37
+ <a href="http://www.interaction-ipsj.org/archives/paper2012/data/Interaction2012/oral/data/pdf/12INT012.pdf">ExpandHelp</a>
38
+ で解決する。</b>
39
+
40
+ <h3>利用例</h3>
41
+
42
+ Gitに関連するタスクのキーワードやパラメタを指定して
43
+ <code>githelp</code>を起動すると
44
+ 候補のリストが表示され、
45
+ カーソルで選択すると実行される。
46
+
47
+ <ul>
48
+ <li><code>README</code> <code>8</code> <code>比較</code> のような引数を指定して
49
+ <code>githelp</code>コマンドを起動すると以下のような候補リストが提示される</li>
50
+
51
+ <pre>
52
+ $ githelp README 8 比較
53
+ [0] 「README.md」ファイルを8分前のものと比較する
54
+ % git diff HEAD "@{8 minutes ago}" README.md
55
+ [1] 「README.md」ファイルを8時間前のものと比較する
56
+ % git diff HEAD "@{8 hours ago}" README.md
57
+ [2] 「README.md」ファイルを8日前のものと比較する
58
+ % git diff HEAD "@{8 days ago}" README.md
59
+ $
60
+ </pre>
61
+
62
+ <li> <code>-x</code> オプションで<code>2</code>のような数字を指定すると実行できる</li>
63
+
64
+ <pre>
65
+ $ githelp README 8 比較 -x2
66
+ diff --git a/README.md b/README.md
67
+ index 862f185..34c8907 100644
68
+ --- a/README.md
69
+ +++ b/README.md
70
+ @@ -1,90 +1,3 @@
71
+ # GitHelp
72
+
73
+ -**Gitのコマンドの使いこなしを支援する**
74
+ -
75
+ -### 解決したい問題
76
+ ...</pre>
77
+
78
+ <li><code>-i</code> オプションを指定すると対話的に選択できる</li>
79
+ </ul>
80
+
81
+ <h3>インストール</h3>
82
+
83
+ <pre>
84
+ % gem install githelp</pre>
85
+
86
+ <h3>実装</h3>
8
87
 
9
88
  <ul>
10
- <li><code>% githelp キーワード</code></li>
11
- <li>ファイル名やタグ名と関係ないキーワードは<code>[keyword]</code>のように指定
12
- <li><code>peco</code>があると便利
89
+ <li><a href="https://github.com/masui/expand_ruby">re_expand</a>
90
+ という正規表現展開ライブラリを利用</li>
91
+ <li><a href="https://github.com/masui/GitHelp/tree/master/data"><code>data</code>ディレクトリ</a>の下に<b>問題パタン</b>と<b>解決コマンド</b>を並べたものを用意しておく</li>
92
+
93
+ <pre>
94
+ [
95
+ "「(#{files.join('|')})」ファイルを(#{numbers.join('|')})分前の(もの|バージョン)と比較する",
96
+ 'git diff HEAD "@{#{$2} minutes ago}" #{$1}'
97
+ ],
98
+ </pre>
99
+
100
+ <li>ファイル名にマッチする引数(e.g. <code>README</code>)や
101
+ 数字にマッチする引数(e.g. <code>8</code>)が指定されると1行目の記述にマッチすることになる</li>
102
+ <li>ワンライナーでは難しい場合は <a href="https://github.com/masui/GitHelp/tree/master/exe"><code>exe</code></a>
103
+ の下にヘルパーコマンドを用意する (e.g. [<code>exe/githelp-changed</code>](https://github.com/masui/GitHelp/tree/master/exe/githelp-changed) )</li>
13
104
  </ul>
105
+
106
+ <h3>解説</h3>
107
+
108
+ <ul>
109
+ <li>ExpandHelp方式とは、
110
+ 様々なタスクの説明と実際の操作を組にして記述しておき、
111
+ ユーザが与えたキーワードやパラメタにマッチするものを
112
+ リストして実行可能にするというものである。</li>
113
+ <li>いろんなクエリに対応できるようにするため説明は正規表現で記述しておく。
114
+ たとえばシステムの時刻をセットする機能の説明は<code>(時計|時刻|時間)を((設定|セット)する|あわせる)</code>
115
+ のような正規表現で記述しておくことにより、<code>時刻をセットする</code> <code>時間をあわせる</code>
116
+ などのクエリにマッチするようにする。</li>
117
+ <li>Macのヘルプで「時間」と入力しても時間をセットする方法は出てこない。
118
+ https://gyazo.com/8a4662344f4300d1be66426e58f03bdf
119
+ <li>「README.mdを消す方法」はマニュアルには書いてない。
120
+ 「ファイルを消す方法」しか書いてない。
121
+ ファイルを消す方法を知った後で「README.md」を指定して実行する必要がある。</li>
122
+ <li>そういえば先日「らくらくホン」画面上の鬱陶しい「羊」を消す方法が全くわからなかったのだが、あれは「マチキャラ」
123
+ と呼ばれるものなので「マチキャラ」を消すという操作が必要だった。
124
+ 「羊 消す」とか「消す」とかで消せるべきだろう。githelpでは <code>$ githelp 削除</code> と入力すれば削除関連で何ができるのかわかる。</li>
125
+ <li>ヘルプといえば人工知能的なアプローチの方がトレンドかもしれないが、
126
+ 本方式だと
127
+ 自分が何をやりたいのかはっきりわかってない場合でも使えるし、
128
+ 正しいセンテンスを正確に入力したり発声したりする必要がないから楽だと思う。
129
+ 予測入力に近いといえるかもしれない。</li>
130
+ <li><b>Gitは単なる適用例であり、広い範囲で使いたいと思っている。</b></li>
131
+ </ul>
132
+
133
+ <h3> 注意</h3>
134
+
135
+ <ul>
136
+ <li>Gitリポジトリのディレクトリで実行して下さい</li>
137
+ <li><a href="https://github.com/masui/expand_ruby">re_expand</a>の実装が富豪的なので
138
+ 大きなリポジトリだと不具合があるかもしれません</li>
139
+ </ul>
140
+
141
+ <h3>関連システム</h3>
142
+
143
+ [AnyCode](http://dl.acm.org/citation.cfm?id=2814295)
144
+
145
+ 自然言語キーワードからJavaスニペットを検索する
146
+ <code>copy fileA fileB</code> みたいなキーワードから <code>FileUtil.copyFile(new File(fileA), new File(fileB))</code> みたいなコード候補を生成する
147
+
148
+ -->
data/_config.yml ADDED
@@ -0,0 +1 @@
1
+ theme: jekyll-theme-cayman
data/exe/githelp CHANGED
@@ -53,7 +53,21 @@ class GitHelp
53
53
  @pagedata.each { |title,pagedata|
54
54
  puts "...#{title}"
55
55
  processing_defs = false
56
+ codeindent = nil
56
57
  pagedata.each { |line|
58
+ if !codeindent
59
+ if line =~ /^(\s*)code:/
60
+ codeindent = $1.length
61
+ next
62
+ end
63
+ else
64
+ line =~ /^(\s*)/
65
+ if line.length < codeindent
66
+ codeindent = nil
67
+ else
68
+ next
69
+ end
70
+ end
57
71
  if line =~ /^\s*[\$\%]/
58
72
  puts line
59
73
  if line =~ /^\%/ && !processing_defs
@@ -124,7 +138,11 @@ class GitHelp
124
138
  io.gets
125
139
  }
126
140
  if res
127
- cmd = res.sub(/^\s*/,'')
141
+ if res =~ /^\#\[(\d+)\]/
142
+ cmd = list[$1.to_i][1]
143
+ else
144
+ cmd = res.sub(/^\s*/,'')
145
+ end
128
146
  puts cmd
129
147
  system cmd
130
148
  end
@@ -140,6 +158,12 @@ class GitHelp
140
158
 
141
159
  end
142
160
 
161
+ is_repository = system 'git rev-parse --git-dir > /dev/null >& /dev/null'
162
+ unless is_repository
163
+ STDERR.puts "Gitレポジトリで実行して下さい"
164
+ exit
165
+ end
166
+
143
167
  options = ARGV.getopts('ut')
144
168
 
145
169
  githelp = GitHelp.new
data/favicon.graffle ADDED
@@ -0,0 +1,304 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
+ <plist version="1.0">
4
+ <dict>
5
+ <key>ActiveLayerIndex</key>
6
+ <integer>0</integer>
7
+ <key>ApplicationVersion</key>
8
+ <array>
9
+ <string>com.omnigroup.OmniGraffle</string>
10
+ <string>139.18.0.187838</string>
11
+ </array>
12
+ <key>AutoAdjust</key>
13
+ <true/>
14
+ <key>BackgroundGraphic</key>
15
+ <dict>
16
+ <key>Bounds</key>
17
+ <string>{{0, 0}, {559, 783}}</string>
18
+ <key>Class</key>
19
+ <string>SolidGraphic</string>
20
+ <key>FontInfo</key>
21
+ <dict>
22
+ <key>Font</key>
23
+ <string>HiraKakuStdN-W8</string>
24
+ <key>Size</key>
25
+ <real>64</real>
26
+ </dict>
27
+ <key>ID</key>
28
+ <integer>2</integer>
29
+ <key>Style</key>
30
+ <dict>
31
+ <key>shadow</key>
32
+ <dict>
33
+ <key>Draws</key>
34
+ <string>NO</string>
35
+ </dict>
36
+ <key>stroke</key>
37
+ <dict>
38
+ <key>Draws</key>
39
+ <string>NO</string>
40
+ </dict>
41
+ </dict>
42
+ </dict>
43
+ <key>BaseZoom</key>
44
+ <integer>0</integer>
45
+ <key>CanvasOrigin</key>
46
+ <string>{0, 0}</string>
47
+ <key>ColumnAlign</key>
48
+ <integer>1</integer>
49
+ <key>ColumnSpacing</key>
50
+ <real>36</real>
51
+ <key>CreationDate</key>
52
+ <string>2018-03-11 12:22:07 +0000</string>
53
+ <key>Creator</key>
54
+ <string>Toshiyuki Masui</string>
55
+ <key>DisplayScale</key>
56
+ <string>1 0/72 in = 1 0/72 in</string>
57
+ <key>GraphDocumentVersion</key>
58
+ <integer>8</integer>
59
+ <key>GraphicsList</key>
60
+ <array>
61
+ <dict>
62
+ <key>Bounds</key>
63
+ <string>{{172, 267.25}, {188, 150}}</string>
64
+ <key>Class</key>
65
+ <string>ShapedGraphic</string>
66
+ <key>FitText</key>
67
+ <string>YES</string>
68
+ <key>Flow</key>
69
+ <string>Resize</string>
70
+ <key>FontInfo</key>
71
+ <dict>
72
+ <key>Font</key>
73
+ <string>Helvetica-Bold</string>
74
+ <key>Size</key>
75
+ <real>125</real>
76
+ </dict>
77
+ <key>ID</key>
78
+ <integer>4</integer>
79
+ <key>Shape</key>
80
+ <string>Rectangle</string>
81
+ <key>Style</key>
82
+ <dict>
83
+ <key>fill</key>
84
+ <dict>
85
+ <key>Draws</key>
86
+ <string>NO</string>
87
+ </dict>
88
+ <key>shadow</key>
89
+ <dict>
90
+ <key>Draws</key>
91
+ <string>NO</string>
92
+ </dict>
93
+ <key>stroke</key>
94
+ <dict>
95
+ <key>Draws</key>
96
+ <string>NO</string>
97
+ </dict>
98
+ </dict>
99
+ <key>Text</key>
100
+ <dict>
101
+ <key>Pad</key>
102
+ <integer>0</integer>
103
+ <key>Text</key>
104
+ <string>{\rtf1\ansi\ansicpg932\cocoartf1404\cocoasubrtf130
105
+ \cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
106
+ {\colortbl;\red255\green255\blue255;\red255\green255\blue255;}
107
+ \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
108
+
109
+ \f0\b\fs250 \cf2 GH}</string>
110
+ <key>VerticalPad</key>
111
+ <integer>0</integer>
112
+ </dict>
113
+ <key>Wrap</key>
114
+ <string>NO</string>
115
+ </dict>
116
+ <dict>
117
+ <key>Bounds</key>
118
+ <string>{{160, 237.5}, {212, 209.5}}</string>
119
+ <key>Class</key>
120
+ <string>ShapedGraphic</string>
121
+ <key>ID</key>
122
+ <integer>3</integer>
123
+ <key>Shape</key>
124
+ <string>Rectangle</string>
125
+ <key>Style</key>
126
+ <dict>
127
+ <key>fill</key>
128
+ <dict>
129
+ <key>Color</key>
130
+ <dict>
131
+ <key>b</key>
132
+ <string>0.452632</string>
133
+ <key>g</key>
134
+ <string>0.090685</string>
135
+ <key>r</key>
136
+ <string>0.16813</string>
137
+ </dict>
138
+ </dict>
139
+ <key>shadow</key>
140
+ <dict>
141
+ <key>Draws</key>
142
+ <string>NO</string>
143
+ </dict>
144
+ <key>stroke</key>
145
+ <dict>
146
+ <key>CornerRadius</key>
147
+ <real>21</real>
148
+ <key>Draws</key>
149
+ <string>NO</string>
150
+ </dict>
151
+ </dict>
152
+ </dict>
153
+ </array>
154
+ <key>GridInfo</key>
155
+ <dict/>
156
+ <key>GuidesLocked</key>
157
+ <string>NO</string>
158
+ <key>GuidesVisible</key>
159
+ <string>YES</string>
160
+ <key>HPages</key>
161
+ <integer>1</integer>
162
+ <key>ImageCounter</key>
163
+ <integer>1</integer>
164
+ <key>KeepToScale</key>
165
+ <false/>
166
+ <key>Layers</key>
167
+ <array>
168
+ <dict>
169
+ <key>Lock</key>
170
+ <string>NO</string>
171
+ <key>Name</key>
172
+ <string>レイヤー 1</string>
173
+ <key>Print</key>
174
+ <string>YES</string>
175
+ <key>View</key>
176
+ <string>YES</string>
177
+ </dict>
178
+ </array>
179
+ <key>LayoutInfo</key>
180
+ <dict>
181
+ <key>Animate</key>
182
+ <string>NO</string>
183
+ <key>circoMinDist</key>
184
+ <real>18</real>
185
+ <key>circoSeparation</key>
186
+ <real>0.0</real>
187
+ <key>layoutEngine</key>
188
+ <string>dot</string>
189
+ <key>neatoSeparation</key>
190
+ <real>0.0</real>
191
+ <key>twopiSeparation</key>
192
+ <real>0.0</real>
193
+ </dict>
194
+ <key>LinksVisible</key>
195
+ <string>NO</string>
196
+ <key>MagnetsVisible</key>
197
+ <string>NO</string>
198
+ <key>MasterSheets</key>
199
+ <array/>
200
+ <key>ModificationDate</key>
201
+ <string>2018-03-11 15:08:37 +0000</string>
202
+ <key>Modifier</key>
203
+ <string>Toshiyuki Masui</string>
204
+ <key>NotesVisible</key>
205
+ <string>NO</string>
206
+ <key>Orientation</key>
207
+ <integer>2</integer>
208
+ <key>OriginVisible</key>
209
+ <string>NO</string>
210
+ <key>PageBreaks</key>
211
+ <string>YES</string>
212
+ <key>PrintInfo</key>
213
+ <dict>
214
+ <key>NSBottomMargin</key>
215
+ <array>
216
+ <string>float</string>
217
+ <string>41</string>
218
+ </array>
219
+ <key>NSHorizonalPagination</key>
220
+ <array>
221
+ <string>coded</string>
222
+ <string>BAtzdHJlYW10eXBlZIHoA4QBQISEhAhOU051bWJlcgCEhAdOU1ZhbHVlAISECE5TT2JqZWN0AIWEASqEhAFxlwCG</string>
223
+ </array>
224
+ <key>NSLeftMargin</key>
225
+ <array>
226
+ <string>float</string>
227
+ <string>18</string>
228
+ </array>
229
+ <key>NSPaperSize</key>
230
+ <array>
231
+ <string>size</string>
232
+ <string>{595, 842}</string>
233
+ </array>
234
+ <key>NSPrintReverseOrientation</key>
235
+ <array>
236
+ <string>int</string>
237
+ <string>0</string>
238
+ </array>
239
+ <key>NSRightMargin</key>
240
+ <array>
241
+ <string>float</string>
242
+ <string>18</string>
243
+ </array>
244
+ <key>NSTopMargin</key>
245
+ <array>
246
+ <string>float</string>
247
+ <string>18</string>
248
+ </array>
249
+ </dict>
250
+ <key>PrintOnePage</key>
251
+ <false/>
252
+ <key>ReadOnly</key>
253
+ <string>NO</string>
254
+ <key>RowAlign</key>
255
+ <integer>1</integer>
256
+ <key>RowSpacing</key>
257
+ <real>36</real>
258
+ <key>SheetTitle</key>
259
+ <string>キャンバス 1</string>
260
+ <key>SmartAlignmentGuidesActive</key>
261
+ <string>YES</string>
262
+ <key>SmartDistanceGuidesActive</key>
263
+ <string>YES</string>
264
+ <key>UniqueID</key>
265
+ <integer>1</integer>
266
+ <key>UseEntirePage</key>
267
+ <false/>
268
+ <key>VPages</key>
269
+ <integer>1</integer>
270
+ <key>WindowInfo</key>
271
+ <dict>
272
+ <key>CurrentSheet</key>
273
+ <integer>0</integer>
274
+ <key>ExpandedCanvases</key>
275
+ <array/>
276
+ <key>Frame</key>
277
+ <string>{{311, 0}, {693, 777}}</string>
278
+ <key>ListView</key>
279
+ <true/>
280
+ <key>OutlineWidth</key>
281
+ <integer>142</integer>
282
+ <key>RightSidebar</key>
283
+ <false/>
284
+ <key>ShowRuler</key>
285
+ <true/>
286
+ <key>Sidebar</key>
287
+ <true/>
288
+ <key>SidebarWidth</key>
289
+ <integer>120</integer>
290
+ <key>VisibleRegion</key>
291
+ <string>{{0, 0}, {544, 620}}</string>
292
+ <key>Zoom</key>
293
+ <real>1</real>
294
+ <key>ZoomValues</key>
295
+ <array>
296
+ <array>
297
+ <string>キャンバス 1</string>
298
+ <real>1</real>
299
+ <real>1</real>
300
+ </array>
301
+ </array>
302
+ </dict>
303
+ </dict>
304
+ </plist>
data/favicon.ico ADDED
Binary file
data/favicon.png ADDED
Binary file