mk_semi_lattice 0.1.1
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 +7 -0
- data/.DS_Store +0 -0
- data/.hyper_card/history/20251020_1517_readme_formatted.md +463 -0
- data/.hyper_card/history/20251020_1828_minor_rev_formatted.md +181 -0
- data/.hyper_card/history/20251021_1110_wsl_ubuntu_japanese.md +218 -0
- data/.hyper_card/history/20251021_1142_double_click_action.md +250 -0
- data/.hyper_card/history/20251021_1151_select_semi_data_action.md +75 -0
- data/.hyper_card/history/20251021_2322_add_comment_edges.md +252 -0
- data/.hyper_card/history/20251022_0725_add_color_index.md +155 -0
- data/.hyper_card/history/classify_251103.md +1090 -0
- data/.hyper_card/history/file_path_modifier.md +481 -0
- data/.hyper_card/history/file_path_modifier_251103.md +505 -0
- data/.hyper_card/history/knowledge_fixer.pdf +0 -0
- data/.hyper_card/history/log_with_symbol_251102.md +184 -0
- data/.hyper_card/history/memory_leak_251028.md +311 -0
- data/.hyper_card/history/set_log_conf_251027.md +295 -0
- data/CHANGELOG.md +5 -0
- data/CODE_OF_CONDUCT.md +132 -0
- data/LICENSE.txt +21 -0
- data/README.md +43 -0
- data/Rakefile +8 -0
- data/exe/mk_semi_lattice +3 -0
- data/exe/sl +5 -0
- data/lib/mk_semi_lattice/config.rb +53 -0
- data/lib/mk_semi_lattice/log.rb +26 -0
- data/lib/mk_semi_lattice/manage_yaml.rb +89 -0
- data/lib/mk_semi_lattice/mk_dir_yaml.rb +40 -0
- data/lib/mk_semi_lattice/mk_node_edge.rb +108 -0
- data/lib/mk_semi_lattice/mk_semi_lattice_graph.rb +254 -0
- data/lib/mk_semi_lattice/mk_semi_lattice_viewer.rb +77 -0
- data/lib/mk_semi_lattice/option_manager.rb +58 -0
- data/lib/mk_semi_lattice/ruby2d_action.rb +136 -0
- data/lib/mk_semi_lattice/version.rb +5 -0
- data/lib/mk_semi_lattice.rb +22 -0
- data/sig/mk_semi_lattice.rbs +4 -0
- metadata +122 -0
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
daddygongon: ubuntu on wslでは、openのかわりにexplorer.exeで開くように変更。
|
|
2
|
+
|
|
3
|
+
GitHub Copilot: WSL環境でファイルエクスプローラーを開く際に`open`コマンドの代わりに`explorer.exe`を使用するように変更する必要がありますね。まず、現在のコードを確認して、どこで`open`コマンドが使用されているかを調べてみます。
|
|
4
|
+
|
|
5
|
+
Read [](file://wsl.localhost/Ubuntu-24.04/home/bob/mk_semi_lattice/lib/mk_semi_lattice.rb)
|
|
6
|
+
|
|
7
|
+
`open`コマンドが使用されている箇所を見つけました。61-68行目でダブルクリック時にファイルやディレクトリを開く処理で`open`コマンドが使われています。WSL環境では`explorer.exe`を使用するように変更する必要がありますね。
|
|
8
|
+
|
|
9
|
+
Using "Replace String in File"
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
```
|
|
15
|
+
変更が完了しました!WSL環境で`open`コマンドの代わりに`explorer.exe`を使用するように変更しました。
|
|
16
|
+
|
|
17
|
+
変更点:
|
|
18
|
+
- ディレクトリの場合:`open -a Terminal '#{clicked_node.file_path}'` → `explorer.exe '#{clicked_node.file_path}'`
|
|
19
|
+
- ファイルの場合:`open #{clicked_node.file_path}` → `explorer.exe '#{clicked_node.file_path}'`
|
|
20
|
+
|
|
21
|
+
これで、WSL環境でダブルクリックした際にWindowsのエクスプローラーが正しく開くようになります。
|
|
22
|
+
|
|
23
|
+
Made changes.
|
|
24
|
+
|
|
25
|
+
daddygongon: directoryのときには、terminalでそのdirectoryが開くように修正
|
|
26
|
+
|
|
27
|
+
GitHub Copilot: ディレクトリをダブルクリックした時にターミナルでそのディレクトリが開くように修正しますね。WSL環境では、Windowsターミナルでディレクトリを開く場合に適切なコマンドを使用する必要があります。
|
|
28
|
+
|
|
29
|
+
Using "Replace String in File"
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
```
|
|
35
|
+
修正完了しました!
|
|
36
|
+
|
|
37
|
+
変更点:
|
|
38
|
+
- ディレクトリの場合:`explorer.exe '#{clicked_node.file_path}'` → `wt.exe -d '#{clicked_node.file_path}'`
|
|
39
|
+
- ファイルの場合:`explorer.exe '#{clicked_node.file_path}'`(変更なし)
|
|
40
|
+
|
|
41
|
+
これで、ディレクトリをダブルクリックした際にはWindowsターミナル(`wt.exe`)でそのディレクトリが開き、ファイルをダブルクリックした際にはエクスプローラーでファイルが開くようになります。
|
|
42
|
+
|
|
43
|
+
`wt.exe -d`コマンドは、指定されたディレクトリをワーキングディレクトリとしてWindowsターミナルを開くコマンドです。
|
|
44
|
+
|
|
45
|
+
Made changes.
|
|
46
|
+
|
|
47
|
+
daddygongon: wt.exeでubuntuで開くように修正
|
|
48
|
+
|
|
49
|
+
GitHub Copilot: WSLのUbuntuでディレクトリを開くように`wt.exe`コマンドを修正しますね。Windows Terminal でUbuntuのディストリビューションを指定して開く必要があります。
|
|
50
|
+
|
|
51
|
+
Using "Replace String in File"
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
```
|
|
57
|
+
修正完了しました!
|
|
58
|
+
|
|
59
|
+
変更点:
|
|
60
|
+
- ディレクトリの場合:`wt.exe -d '#{clicked_node.file_path}'` → `wt.exe -p Ubuntu-24.04 -d '#{clicked_node.file_path}'`
|
|
61
|
+
|
|
62
|
+
`-p Ubuntu-24.04`オプションを追加することで、Windows TerminalでUbuntu-24.04のプロファイル(WSL)を使用してディレクトリを開くようになります。これで、ディレクトリをダブルクリックした際にUbuntuのシェル環境でそのディレクトリが開かれます。
|
|
63
|
+
|
|
64
|
+
Made changes.
|
|
65
|
+
|
|
66
|
+
daddygongon: 開くwindowのthemeを'Tango light'に指定するように修正
|
|
67
|
+
|
|
68
|
+
GitHub Copilot: Windows TerminalでTango lightテーマを指定してウィンドウを開くように修正しますね。
|
|
69
|
+
|
|
70
|
+
Using "Replace String in File"
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
```
|
|
76
|
+
修正完了しました!
|
|
77
|
+
|
|
78
|
+
変更点:
|
|
79
|
+
- ディレクトリの場合:`wt.exe -p Ubuntu-24.04 -d '#{clicked_node.file_path}'` → `wt.exe -p Ubuntu-24.04 --colorScheme 'Tango Light' -d '#{clicked_node.file_path}'`
|
|
80
|
+
|
|
81
|
+
`--colorScheme 'Tango Light'`オプションを追加することで、Windows TerminalでUbuntu-24.04を開く際に'Tango Light'テーマが適用されるようになります。これで、ディレクトリをダブルクリックした時に明るいTangoテーマでターミナルが開かれます。
|
|
82
|
+
|
|
83
|
+
Made changes.
|
|
84
|
+
|
|
85
|
+
daddygongon: textの描画で日本語が□で表示されます。
|
|
86
|
+
|
|
87
|
+
GitHub Copilot: 日本語が□で表示される問題は、Ruby2Dで日本語フォントが適切に設定されていないことが原因です。まず、現在のテキスト描画部分を確認して、日本語対応のフォントを設定する必要があります。
|
|
88
|
+
|
|
89
|
+
Searched text for `Text\.new|text|font|draw` (`**/lib/mk_semi_lattice/**/*.rb`), 6 results
|
|
90
|
+
|
|
91
|
+
テキスト描画がmk_semi_lattice_graph.rbで行われているようですね。このファイルを確認してフォント設定を修正しましょう。
|
|
92
|
+
|
|
93
|
+
Read [](file://wsl.localhost/Ubuntu-24.04/home/bob/mk_semi_lattice/lib/mk_semi_lattice/mk_semi_lattice_graph.rb)
|
|
94
|
+
|
|
95
|
+
日本語フォントの問題を解決するために、Ruby2Dで日本語対応フォントを指定する必要があります。テキスト描画部分でフォントファイルを指定するように修正しましょう。
|
|
96
|
+
|
|
97
|
+
Using "Replace String in File"
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
```
|
|
103
|
+
DejaVuSansフォントを指定しましたが、より良い日本語サポートのために、日本語フォントが利用可能かチェックして適切なフォントを選択するようにしましょう。一般的にUbuntuで利用可能な日本語フォントを使用するように修正します。
|
|
104
|
+
|
|
105
|
+
Using "Replace String in File"
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
Using "Replace String in File"
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
```
|
|
119
|
+
修正完了しました!
|
|
120
|
+
|
|
121
|
+
変更点:
|
|
122
|
+
1. `japanese_font`関数を追加し、日本語対応フォントを優先順位で選択するようにしました
|
|
123
|
+
2. テキスト描画時に`font: font_path`を指定して、日本語フォントを使用するようにしました
|
|
124
|
+
|
|
125
|
+
これで以下の優先順位でフォントが選択されます:
|
|
126
|
+
1. `NotoSansCJK-Regular.ttc` - 日本語対応の高品質フォント
|
|
127
|
+
2. `LiberationSans-Regular.ttf` - Unicode対応フォント
|
|
128
|
+
3. `DejaVuSans.ttf` - 基本的なUnicodeフォント
|
|
129
|
+
4. `Arial.ttf` - フォールバック
|
|
130
|
+
|
|
131
|
+
日本語文字が□で表示される問題が解決され、適切に日本語テキストが表示されるようになります。
|
|
132
|
+
|
|
133
|
+
もしNoto CJKフォントがインストールされていない場合は、以下のコマンドでインストールできます:
|
|
134
|
+
```bash
|
|
135
|
+
sudo apt update && sudo apt install fonts-noto-cjk
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
Made changes.
|
|
139
|
+
|
|
140
|
+
daddygongon: japanese_fontは"/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf"が選択されていますが□表示のままです
|
|
141
|
+
|
|
142
|
+
GitHub Copilot: DejaVuSansフォントでも日本語が□表示のままということは、そのフォントに日本語のグリフが含まれていないためです。WSL Ubuntu環境で確実に日本語を表示するために、日本語フォントをインストールして、より確実な日本語フォントを使用するように修正しましょう。
|
|
143
|
+
|
|
144
|
+
まず、現在利用可能な日本語フォントを確認して、適切なフォントパスに修正します。
|
|
145
|
+
|
|
146
|
+
Using "Replace String in File"
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
```
|
|
152
|
+
次に、日本語フォントがない場合の対策として、フォントなしでも日本語が表示できるようにRuby2Dのデフォルト動作を試すオプションを追加しましょう。
|
|
153
|
+
|
|
154
|
+
Using "Replace String in File"
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
```
|
|
160
|
+
修正完了しました!
|
|
161
|
+
|
|
162
|
+
変更点:
|
|
163
|
+
1. 日本語フォントの候補を追加(Noto CJK、Takao Gothic等)
|
|
164
|
+
2. フォント選択時にどのフォントが選ばれたかをコンソールに出力
|
|
165
|
+
3. フォントファイルが存在しない場合は、`font`パラメータを省略してRuby2Dのデフォルト動作に任せる
|
|
166
|
+
|
|
167
|
+
日本語フォントをインストールするには、ターミナルで以下のコマンドを実行してください:
|
|
168
|
+
|
|
169
|
+
```bash
|
|
170
|
+
sudo apt update
|
|
171
|
+
sudo apt install fonts-noto-cjk fonts-takao-gothic fonts-vlgothic
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
これで、確実に日本語が表示されるフォントがインストールされ、日本語の□表示問題が解決されるはずです。
|
|
175
|
+
|
|
176
|
+
Made changes.
|
|
177
|
+
|
|
178
|
+
daddygongon: japanese fontsをinstallしたpathがうまくよみこめてないようです。
|
|
179
|
+
|
|
180
|
+
GitHub Copilot: 日本語フォントがインストールされているにも関わらず、パスが正しく読み込めていないようですね。実際にシステムにインストールされているフォントのパスを確認して、正しいパスに修正しましょう。
|
|
181
|
+
|
|
182
|
+
まず、現在システムで利用可能な日本語フォントを確認してみます:
|
|
183
|
+
|
|
184
|
+
Ran terminal command: find /usr/share/fonts -name "*oto*" -o -name "*CJK*" -o -name "*japan*" -o -name "*takao*" -o -name "*vlgothic*" 2>/dev/null
|
|
185
|
+
|
|
186
|
+
PowerShellから実行する際に問題があるようです。WSLコマンドを使って直接Ubuntu内でコマンドを実行してみましょう:
|
|
187
|
+
|
|
188
|
+
Ran terminal command: wsl find /usr/share/fonts -name "*oto*" -o -name "*CJK*" -o -name "*japan*" -o -name "*takao*" -o -name "*vlgothic*"
|
|
189
|
+
|
|
190
|
+
引用符の問題があるようです。別のアプローチで確認してみましょう:
|
|
191
|
+
|
|
192
|
+
Ran terminal command: wsl ls /usr/share/fonts/truetype/
|
|
193
|
+
|
|
194
|
+
良いですね!日本語フォントがインストールされているのが確認できました。各ディレクトリの内容も確認してみましょう:
|
|
195
|
+
|
|
196
|
+
Ran terminal command: wsl ls /usr/share/fonts/truetype/takao-gothic/
|
|
197
|
+
|
|
198
|
+
Ran terminal command: wsl ls /usr/share/fonts/truetype/vlgothic/
|
|
199
|
+
|
|
200
|
+
Ran terminal command: wsl ls -la /usr/share/fonts/truetype/fonts-japanese-gothic.ttf
|
|
201
|
+
|
|
202
|
+
実際のフォントパスがわかりました。これを基に`japanese_font`関数を修正しましょう:
|
|
203
|
+
|
|
204
|
+
Using "Replace String in File"
|
|
205
|
+
|
|
206
|
+
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
```
|
|
210
|
+
修正完了しました!
|
|
211
|
+
|
|
212
|
+
変更点:
|
|
213
|
+
1. 実際にシステムに存在する日本語フォントのパスを優先順位の上位に配置
|
|
214
|
+
- `TakaoGothic.ttf` - 確実に日本語表示できるフォント
|
|
215
|
+
- `VL-Gothic-Regular.ttf` - もう一つの日本語フォント
|
|
216
|
+
- `fonts-japanese-gothic.ttf` - シンボリックリンクですが有効なパス
|
|
217
|
+
|
|
218
|
+
これで、実際にインストールされている日本語フォントが正しく読み込まれ、日本語文字が□ではなく適切に表示されるようになります。TakaoGothicやVL-Gothicは確実に日本語のグリフを含んでいるため、日本語表示の問題が解決されるはずです。
|
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
daddygongon: Mac環境ではexplorer.exeではなく,openで開くように修正.
|
|
2
|
+
|
|
3
|
+
GitHub Copilot: ### [mk_semi_lattice.rb](file:///Users/bob/git_hub/mk_semi_lattice/lib/mk_semi_lattice.rb)
|
|
4
|
+
|
|
5
|
+
修正内容:
|
|
6
|
+
ダブルクリック時のファイルオープンコマンドを、Windowsでは`explorer.exe`、Macでは`open`を使うように分岐します。OS判定には`RbConfig::CONFIG['host_os']`を利用します。
|
|
7
|
+
|
|
8
|
+
````ruby
|
|
9
|
+
# ...existing code...
|
|
10
|
+
comm = nil
|
|
11
|
+
if clicked_node.file_path
|
|
12
|
+
if File.directory?(clicked_node.file_path)
|
|
13
|
+
if RbConfig::CONFIG['host_os'] =~ /darwin/
|
|
14
|
+
comm = "open '#{clicked_node.file_path}'"
|
|
15
|
+
else
|
|
16
|
+
comm = "wt.exe -p Ubuntu-24.04 --colorScheme 'Tango Light' -d '#{clicked_node.file_path}'"
|
|
17
|
+
end
|
|
18
|
+
else
|
|
19
|
+
if RbConfig::CONFIG['host_os'] =~ /darwin/
|
|
20
|
+
comm = "open '#{clicked_node.file_path}'"
|
|
21
|
+
else
|
|
22
|
+
comm = "explorer.exe '#{clicked_node.file_path}'"
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
puts comm
|
|
26
|
+
system comm
|
|
27
|
+
else
|
|
28
|
+
puts "no link error"
|
|
29
|
+
end
|
|
30
|
+
# ...existing code...
|
|
31
|
+
````
|
|
32
|
+
|
|
33
|
+
Made changes.
|
|
34
|
+
|
|
35
|
+
daddygongon: darwinではTerminalでopenするように修正.
|
|
36
|
+
|
|
37
|
+
GitHub Copilot: ### [mk_semi_lattice.rb](file:///Users/bob/git_hub/mk_semi_lattice/lib/mk_semi_lattice.rb)
|
|
38
|
+
|
|
39
|
+
修正内容:
|
|
40
|
+
Mac(darwin)環境でディレクトリを開く場合は、`open -a Terminal` を使うように修正します。ファイルの場合は従来通り `open` を使います。
|
|
41
|
+
|
|
42
|
+
````ruby
|
|
43
|
+
# ...existing code...
|
|
44
|
+
if clicked_node.file_path
|
|
45
|
+
if File.directory?(clicked_node.file_path)
|
|
46
|
+
if RbConfig::CONFIG['host_os'] =~ /darwin/
|
|
47
|
+
comm = "open -a Terminal '#{clicked_node.file_path}'"
|
|
48
|
+
else
|
|
49
|
+
comm = "wt.exe -p Ubuntu-24.04 --colorScheme 'Tango Light' -d '#{clicked_node.file_path}'"
|
|
50
|
+
end
|
|
51
|
+
else
|
|
52
|
+
if RbConfig::CONFIG['host_os'] =~ /darwin/
|
|
53
|
+
comm = "open '#{clicked_node.file_path}'"
|
|
54
|
+
else
|
|
55
|
+
comm = "explorer.exe '#{clicked_node.file_path}'"
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
puts comm
|
|
59
|
+
system comm
|
|
60
|
+
else
|
|
61
|
+
puts "no link error"
|
|
62
|
+
end
|
|
63
|
+
# ...existing code...
|
|
64
|
+
````
|
|
65
|
+
|
|
66
|
+
Made changes.
|
|
67
|
+
|
|
68
|
+
daddygongon: #file:mk_semi_lattice.rb:93-111 の動作を解説して.
|
|
69
|
+
|
|
70
|
+
GitHub Copilot: ### [mk_semi_lattice.rb:93-111 の解説](file:///Users/bob/git_hub/mk_semi_lattice/lib/mk_semi_lattice.rb%3A93-111%20%E3%81%AE%E8%A7%A3%E8%AA%AC)
|
|
71
|
+
|
|
72
|
+
この範囲は、マウスダウン(クリック)イベント時のダブルクリック判定とファイルオープン処理です。
|
|
73
|
+
|
|
74
|
+
#### ステップごとの動作
|
|
75
|
+
|
|
76
|
+
1. **クリックされたノードがあるか判定**
|
|
77
|
+
`if clicked_node` で、クリック位置にノードがあった場合のみ処理を進めます。
|
|
78
|
+
|
|
79
|
+
2. **ダブルクリック判定**
|
|
80
|
+
`if last_click_node == clicked_node && last_click_time && (now - last_click_time < 0.4)`
|
|
81
|
+
- 前回クリックしたノードと同じノードをクリックしているか
|
|
82
|
+
- 前回クリック時刻が記録されているか
|
|
83
|
+
- 前回クリックから0.4秒以内か
|
|
84
|
+
これらを満たす場合、ダブルクリックとみなします。
|
|
85
|
+
|
|
86
|
+
3. **ファイルオープンコマンドの生成**
|
|
87
|
+
- ノードにファイルパスがある場合のみ処理
|
|
88
|
+
- ディレクトリなら
|
|
89
|
+
- Macなら `open -a Terminal 'ディレクトリパス'`
|
|
90
|
+
- それ以外(Windows想定)なら `wt.exe ...`
|
|
91
|
+
- ファイルなら
|
|
92
|
+
- Macなら `open 'ファイルパス'`
|
|
93
|
+
- それ以外なら `explorer.exe 'ファイルパス'`
|
|
94
|
+
- コマンドを `comm` に格納し、標準出力に表示後、`system comm` で実行
|
|
95
|
+
|
|
96
|
+
4. **ファイルパスがなければエラー表示**
|
|
97
|
+
`"no link error"` を出力
|
|
98
|
+
|
|
99
|
+
5. **クリック時刻・ノードの記録**
|
|
100
|
+
ダブルクリック判定用に、`last_click_time` と `last_click_node` を更新
|
|
101
|
+
|
|
102
|
+
この処理により、ノードをダブルクリックすると、そのノードに紐づくファイルやディレクトリがOSに応じた方法で開かれます。
|
|
103
|
+
|
|
104
|
+
daddygongon: #file:mk_semi_lattice.rb:93-111 を切り出して,double_click_actionという関数にしてください.
|
|
105
|
+
|
|
106
|
+
GitHub Copilot: ### [mk_semi_lattice.rb](file:///Users/bob/git_hub/mk_semi_lattice/lib/mk_semi_lattice.rb)
|
|
107
|
+
|
|
108
|
+
`93-111` のダブルクリック判定とファイルオープン処理を `double_click_action(clicked_node, last_click_node, last_click_time)` 関数に切り出します。
|
|
109
|
+
`last_click_time` と `last_click_node` の更新は呼び出し元で行うようにします。
|
|
110
|
+
|
|
111
|
+
````ruby
|
|
112
|
+
# ...existing code...
|
|
113
|
+
|
|
114
|
+
def double_click_action(clicked_node, last_click_node, last_click_time)
|
|
115
|
+
now = Time.now
|
|
116
|
+
if last_click_node == clicked_node && last_click_time && (now - last_click_time < 0.4)
|
|
117
|
+
comm = nil
|
|
118
|
+
if clicked_node.file_path
|
|
119
|
+
if File.directory?(clicked_node.file_path)
|
|
120
|
+
if RbConfig::CONFIG['host_os'] =~ /darwin/
|
|
121
|
+
comm = "open -a Terminal '#{clicked_node.file_path}'"
|
|
122
|
+
else
|
|
123
|
+
comm = "wt.exe -p Ubuntu-24.04 --colorScheme 'Tango Light' -d '#{clicked_node.file_path}'"
|
|
124
|
+
end
|
|
125
|
+
else
|
|
126
|
+
if RbConfig::CONFIG['host_os'] =~ /darwin/
|
|
127
|
+
comm = "open '#{clicked_node.file_path}'"
|
|
128
|
+
else
|
|
129
|
+
comm = "explorer.exe '#{clicked_node.file_path}'"
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
puts comm
|
|
133
|
+
system comm
|
|
134
|
+
else
|
|
135
|
+
puts "no link error"
|
|
136
|
+
end
|
|
137
|
+
return now
|
|
138
|
+
end
|
|
139
|
+
nil
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
# ...existing code...
|
|
143
|
+
|
|
144
|
+
on :mouse_down do |event|
|
|
145
|
+
mx, my = event.x, event.y
|
|
146
|
+
shift_down = !!app.shift_pressed
|
|
147
|
+
clicked_node = nil
|
|
148
|
+
app.nodes.each do |n|
|
|
149
|
+
if Math.hypot(n.x - mx, n.y - my) < 30
|
|
150
|
+
clicked_node = n
|
|
151
|
+
if shift_down
|
|
152
|
+
n.fixed = false
|
|
153
|
+
app.selected = nil
|
|
154
|
+
else
|
|
155
|
+
app.selected = n
|
|
156
|
+
n.fixed = true if event.button == :left
|
|
157
|
+
n.fixed = false if event.button == :middle
|
|
158
|
+
n.linked = true if event.button == :right
|
|
159
|
+
end
|
|
160
|
+
end
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
# ダブルクリック判定とファイルオープン
|
|
164
|
+
if clicked_node
|
|
165
|
+
result = double_click_action(clicked_node, last_click_node, last_click_time)
|
|
166
|
+
last_click_time = result || Time.now
|
|
167
|
+
last_click_node = clicked_node
|
|
168
|
+
end
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
# ...existing code...
|
|
172
|
+
````
|
|
173
|
+
|
|
174
|
+
Made changes.
|
|
175
|
+
|
|
176
|
+
daddygongon: ごめんなさい.double_clickの判定部分とaciton部分を分けて関数にしてください.
|
|
177
|
+
|
|
178
|
+
GitHub Copilot: ### [mk_semi_lattice.rb](file:///Users/bob/git_hub/mk_semi_lattice/lib/mk_semi_lattice.rb)
|
|
179
|
+
|
|
180
|
+
ダブルクリック判定部分とアクション部分を分離し、
|
|
181
|
+
- `double_click?(clicked_node, last_click_node, last_click_time)`
|
|
182
|
+
- `double_click_action(clicked_node)`
|
|
183
|
+
の2関数に分けます。
|
|
184
|
+
|
|
185
|
+
````ruby
|
|
186
|
+
# ...existing code...
|
|
187
|
+
|
|
188
|
+
def double_click?(clicked_node, last_click_node, last_click_time)
|
|
189
|
+
now = Time.now
|
|
190
|
+
if last_click_node == clicked_node && last_click_time && (now - last_click_time < 0.4)
|
|
191
|
+
return true, now
|
|
192
|
+
end
|
|
193
|
+
return false, now
|
|
194
|
+
end
|
|
195
|
+
|
|
196
|
+
def double_click_action(clicked_node)
|
|
197
|
+
comm = nil
|
|
198
|
+
if clicked_node.file_path
|
|
199
|
+
if File.directory?(clicked_node.file_path)
|
|
200
|
+
if RbConfig::CONFIG['host_os'] =~ /darwin/
|
|
201
|
+
comm = "open -a Terminal '#{clicked_node.file_path}'"
|
|
202
|
+
else
|
|
203
|
+
comm = "wt.exe -p Ubuntu-24.04 --colorScheme 'Tango Light' -d '#{clicked_node.file_path}'"
|
|
204
|
+
end
|
|
205
|
+
else
|
|
206
|
+
if RbConfig::CONFIG['host_os'] =~ /darwin/
|
|
207
|
+
comm = "open '#{clicked_node.file_path}'"
|
|
208
|
+
else
|
|
209
|
+
comm = "explorer.exe '#{clicked_node.file_path}'"
|
|
210
|
+
end
|
|
211
|
+
end
|
|
212
|
+
puts comm
|
|
213
|
+
system comm
|
|
214
|
+
else
|
|
215
|
+
puts "no link error"
|
|
216
|
+
end
|
|
217
|
+
end
|
|
218
|
+
|
|
219
|
+
on :mouse_down do |event|
|
|
220
|
+
mx, my = event.x, event.y
|
|
221
|
+
shift_down = !!app.shift_pressed
|
|
222
|
+
clicked_node = nil
|
|
223
|
+
app.nodes.each do |n|
|
|
224
|
+
if Math.hypot(n.x - mx, n.y - my) < 30
|
|
225
|
+
clicked_node = n
|
|
226
|
+
if shift_down
|
|
227
|
+
n.fixed = false
|
|
228
|
+
app.selected = nil
|
|
229
|
+
else
|
|
230
|
+
app.selected = n
|
|
231
|
+
n.fixed = true if event.button == :left
|
|
232
|
+
n.fixed = false if event.button == :middle
|
|
233
|
+
n.linked = true if event.button == :right
|
|
234
|
+
end
|
|
235
|
+
end
|
|
236
|
+
end
|
|
237
|
+
|
|
238
|
+
# ダブルクリック判定とファイルオープン
|
|
239
|
+
if clicked_node
|
|
240
|
+
is_double, now = double_click?(clicked_node, last_click_node, last_click_time)
|
|
241
|
+
double_click_action(clicked_node) if is_double
|
|
242
|
+
last_click_time = now
|
|
243
|
+
last_click_node = clicked_node
|
|
244
|
+
end
|
|
245
|
+
end
|
|
246
|
+
|
|
247
|
+
# ...existing code...
|
|
248
|
+
````
|
|
249
|
+
|
|
250
|
+
Made changes.
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
daddygongon: #file:mk_semi_lattice.rb:27-49 の動作を解説してください.
|
|
2
|
+
|
|
3
|
+
GitHub Copilot: ### [mk_semi_lattice.rb](file:///Users/bob/git_hub/mk_semi_lattice/lib/mk_semi_lattice.rb)
|
|
4
|
+
|
|
5
|
+
#### 解説
|
|
6
|
+
|
|
7
|
+
該当部分(27-49行目)は、コマンドライン引数やファイルの存在状況に応じて、処理対象のファイルを決定し、`MkSemiLatticeData` のインスタンスを生成しています。
|
|
8
|
+
|
|
9
|
+
1. `path = ARGV[0] || '.'`
|
|
10
|
+
コマンドライン引数でパスが指定されていればそれを、なければカレントディレクトリ(`.`)を使います。
|
|
11
|
+
|
|
12
|
+
2. `$semi_dir = File.join(path, '.semi_lattice')`
|
|
13
|
+
指定したパス配下に .semi_lattice ディレクトリのパスを作成します。
|
|
14
|
+
|
|
15
|
+
3. `if path == '.' ... end`
|
|
16
|
+
パスがカレントディレクトリの場合、.semi_lattice ディレクトリがなければ作成し、
|
|
17
|
+
その中に `dir.yaml` を生成(`MkDirYaml`)、さらに `dir_node_edge.yaml` を生成(`MkNodeEdge`)します。
|
|
18
|
+
|
|
19
|
+
4. `require 'ruby2d'`
|
|
20
|
+
Ruby2Dライブラリを読み込みます(グラフィック描画用)。
|
|
21
|
+
|
|
22
|
+
5. `file = ARGV[0] || File.join($semi_dir, "dir_node_edge.yaml")`
|
|
23
|
+
コマンドライン引数があればそれを、なければ dir_node_edge.yaml を使います。
|
|
24
|
+
|
|
25
|
+
6. `semi_lattice_yaml_path = File.join($semi_dir, "semi_lattice.yaml")`
|
|
26
|
+
semi_lattice.yaml のパスを作成します。
|
|
27
|
+
|
|
28
|
+
7. `if (ARGV[0] && ARGV[0] =~ /semi_lattice\.ya?ml\z/) || File.exist?(semi_lattice_yaml_path)`
|
|
29
|
+
コマンドライン引数が `semi_lattice.yaml` ならそれを、なければ semi_lattice.yaml が存在するかを判定します。
|
|
30
|
+
|
|
31
|
+
- 条件成立時:
|
|
32
|
+
`file` を `semi_lattice.yaml` にし、ノード座標や固定状態を反映するため `MkSemiLatticeData.new(file, with_semi_lattice_yaml: true)` を生成。
|
|
33
|
+
|
|
34
|
+
- 条件不成立時:
|
|
35
|
+
`file` を元に `MkSemiLatticeData.new(file)` を生成。
|
|
36
|
+
|
|
37
|
+
この部分は、初回起動時はディレクトリ構造からグラフデータを生成し、2回目以降は保存済みのノード座標や状態を復元するための分岐処理です。
|
|
38
|
+
|
|
39
|
+
daddygongon: この解説をフローチャートにできますか?
|
|
40
|
+
|
|
41
|
+
GitHub Copilot: ### [mk_semi_lattice.rb](file:///Users/bob/git_hub/mk_semi_lattice/lib/mk_semi_lattice.rb)
|
|
42
|
+
|
|
43
|
+
フローチャート化のため、該当部分の処理の流れをテキストで表現します。
|
|
44
|
+
(コード変更はありません)
|
|
45
|
+
|
|
46
|
+
````markdown
|
|
47
|
+
// ...existing code...
|
|
48
|
+
|
|
49
|
+
フローチャート(テキスト表現):
|
|
50
|
+
|
|
51
|
+
1. 開始
|
|
52
|
+
2. path = ARGV[0] || '.'
|
|
53
|
+
3. $semi_dir = File.join(path, '.semi_lattice')
|
|
54
|
+
4. path == '.' か?
|
|
55
|
+
├─ Yes:
|
|
56
|
+
│ ├─ $semi_dirが存在しなければ作成
|
|
57
|
+
│ ├─ dir_yaml_path = $semi_dir/dir.yaml
|
|
58
|
+
│ ├─ MkDirYamlでdir.yaml生成
|
|
59
|
+
│ └─ MkNodeEdgeでdir_node_edge.yaml生成
|
|
60
|
+
└─ No: 何もしない
|
|
61
|
+
5. require 'ruby2d'
|
|
62
|
+
6. file = ARGV[0] || $semi_dir/dir_node_edge.yaml
|
|
63
|
+
7. semi_lattice_yaml_path = $semi_dir/semi_lattice.yaml
|
|
64
|
+
8. (ARGV[0]がsemi_lattice.yamlか、またはsemi_lattice.yamlが存在するか)?
|
|
65
|
+
├─ Yes:
|
|
66
|
+
│ ├─ file = ARGV[0](semi_lattice.yaml指定時)またはsemi_lattice_yaml_path
|
|
67
|
+
│ └─ MkSemiLatticeData.new(file, with_semi_lattice_yaml: true)
|
|
68
|
+
└─ No:
|
|
69
|
+
└─ MkSemiLatticeData.new(file)
|
|
70
|
+
9. 終了
|
|
71
|
+
|
|
72
|
+
// ...existing code...
|
|
73
|
+
````
|
|
74
|
+
|
|
75
|
+
Made changes.
|