「階層化マクロメニュー」の版間の差分
新規作成 |
SyntaxHighlightにcopyの追加 |
||
| (2人の利用者による、間の11版が非表示) | |||
| 1行目: | 1行目: | ||
= 概要 = | == 概要 == | ||
フォルダ内のマクロファイルを階層化してメニューから呼び出します。 | |||
= | == 注意事項 == | ||
マクロライブラリにある [[includeライブラリ]] | マクロライブラリにある [[includeライブラリ]] を利用しています。 | ||
このマクロの前にそちらを導入してください。 | |||
== 使用例 == | |||
メニューの [表示] - [ツール バー] - [マクロ バー] でバーを表示し、マクロを登録するとこのようになります。 | |||
下のサンプル画像の My Macros フォルダサンプルです。 | |||
[[ファイル:TreeMacroExecSample.zip]] | |||
[[ファイル:TreeMacroExecSample.png]] | [[ファイル:TreeMacroExecSample.png]] | ||
== フォルダ内の文字コード統一 == | |||
指定したフォルダ内の文字コードを統一します。 | |||
階層化マクロメニューは 1 つの文字コードしか扱えないので、事前にこのマクロで文字コードを統一します。 | |||
階層化マクロメニューは 1 | |||
== | === 注意事項 === | ||
複数回実行しても「× 個のファイルを変換しました」と出る場合がありますが、日本語が含まれないファイルは毎回変換される可能性がありますので、正常な動作です。 | |||
== オプション == | === オプション === | ||
{| class="wikitable" | {| class="wikitable" | ||
!charset | !charset | ||
| | |マクロファイルの文字コードです。<br>階層化マクロメニューと同じ文字コードにします。 | ||
|- | |- | ||
!ext | !ext | ||
| | |対象にするファイルの指定です。 | ||
|} | |} | ||
== | === ソースコード === | ||
< | <syntaxhighlight lang="javascript" copy> | ||
#include "include/IO.js" | #include "include/IO.js" | ||
#title = "フォルダ内文字コード変換" | #title = "フォルダ内文字コード変換" | ||
| 122行目: | 124行目: | ||
Alert(count + " 個のファイルを変換しました"); | Alert(count + " 個のファイルを変換しました"); | ||
</ | </syntaxhighlight> | ||
= 階層化マクロメニュー = | == 階層化マクロメニュー == | ||
マクロファイル名と同じフォルダに含まれるフォルダ及びマクロファイルを階層的にメニューで表示し、 | |||
選択されたマクロを実行します。 | |||
== オプション == | === オプション === | ||
{| class="wikitable" | {| class="wikitable" | ||
!charset | !charset | ||
| | |マクロファイルの文字コードです。<br>自動判別はできないので、1つに指定してください。 | ||
|- | |- | ||
!useCache | !useCache | ||
| | |タイトルの読み込みにキャッシュを利用するかのフラグです。<br>メニュー表示までに時間がかかる場合は true にしてください。 | ||
|- | |||
!ignoreFolder<br>ignoreFile | |||
|メニューから除外するファイル・フォルダの定義です。<br>文字列定義の場合、|で区切られた名前と一致するファイル・フォルダが無視されます。<br>正規表現で書かれている場合はその正規表現に一致するファイル・フォルダが無視されます。 | |||
|} | |} | ||
== | === 呼び出したマクロがうまく動かない場合 === | ||
< | * 文字コードは一致しているか? | ||
** オプションで指定している文字コードと一致している必要があります。 | |||
* マクロとは別に必要なファイル(include ファイルや exe など)はあるか? | |||
** マクロとの相対位置は維持した方が確実です(include は補正かけてますが)。 | |||
* スクリプト内で「ScriptName」「ScriptFullName」を利用しているか? | |||
** 大文字小文字の書き方によっては正しく動きません。呼び出されるマクロ側の変数名を上のように直してください。 | |||
=== ソースコード === | |||
<syntaxhighlight lang="javascript" copy> | |||
#include "include/StringEx.js" | #include "include/StringEx.js" | ||
#include "include/IO.js" | #include "include/IO.js" | ||
| 153行目: | 165行目: | ||
// タイトル表示にキャッシュを使うか | // タイトル表示にキャッシュを使うか | ||
var useCache = false; | var useCache = false; | ||
// 無視するファイル・フォルダの定義 | |||
var ignoreFolder = "include|MacroSettings"; // 無視するフォルダ | |||
var ignoreFile = ""; // 無視するファイル | |||
// ========================================================= | // ========================================================= | ||
| 192行目: | 208行目: | ||
} | } | ||
var base = new IO.Folder(basePath); | var base = new IO.Folder(basePath); | ||
// フォルダ・ファイルの無視判定 | |||
var ignoreFile = ignoreFile || ""; | |||
var ignoreFolder = ignoreFolder || ""; | |||
function IsIgnoreName(name, isFile){ | |||
var def = isFile ? ignoreFile : ignoreFolder; | |||
if (!def) { | |||
return false; | |||
} | |||
if (typeof def == 'string') { | |||
var a = def.split("|"); | |||
for (var i=0; i<a.length; i++) { | |||
if (name.equalsIgnoreCase(a[i])) { | |||
return true; | |||
} | |||
} | |||
} else if (def instanceof RegExp) { | |||
if (name.search(def) >= 0) { | |||
return true; | |||
} | |||
} | |||
return false; | |||
} | |||
// 配下のフォルダを辿っていきながら、メニューに追加する | // 配下のフォルダを辿っていきながら、メニューに追加する | ||
| 200行目: | 240行目: | ||
var folders = folder.GetFolders(); | var folders = folder.GetFolders(); | ||
for (var i=0; i<folders.length; i++) { | for (var i=0; i<folders.length; i++) { | ||
var subMenu = CreatePopupMenu(); | if (!IsIgnoreName(folders[i].GetName(), false)) { | ||
var subMenu = CreatePopupMenu(); | |||
RecursiveInsert(folders[i], subMenu, list, nest+1); | |||
menu.AddPopup(folders[i].GetName(), subMenu); | |||
} | |||
} | } | ||
// ファイル処理 | // ファイル処理 | ||
var files = folder.GetFiles("*.js"); | var files = folder.GetFiles("*.js"); | ||
for (var i=0; i<files.length; i++) { | for (var i=0; i<files.length; i++) { | ||
var title = LoadTitle(files[i].GetPath(), false); | if (!IsIgnoreName(files[i].GetName(), true)) { | ||
var title = LoadTitle(files[i].GetPath(), false); | |||
if (!title) { | |||
title = files[i].GetName(); | |||
} | |||
menu.Add(title, list.length); | |||
list.push(files[i].GetPath()); | |||
} | } | ||
} | } | ||
})(base, menu, list, 1); | })(base, menu, list, 1); | ||
| 231行目: | 275行目: | ||
IO.Serialize(map); | IO.Serialize(map); | ||
} | } | ||
</ | </syntaxhighlight> | ||
スポンサーリンク