WindowsでインストールされているMathematicaのバージョン間で.NBファイルの関連付けを切り替えるためのパレットを作成したいと思います。
現時点では、インストールされているMathematicaのバージョンを列挙し、それらを切り替えるための次のコードを開発しました。
1)インストールされているバージョンのMathematicaのシステムレジストリキーの名前のリストを取得する:
installedVersions =
Select[Developer`EnumerateRegistrySubkeys["HKEY_CLASSES_ROOT"],
StringMatchQ[#, "Mathematica.NB." ~~ ___] || # ===
"MathematicaNB" &]
=> {"Mathematica.NB.7.0.1.1213965", "MathematicaNB"}
2)システムレジストリでMathematicaフロントエンドを起動するためのコマンドラインオプション -b
(スプラッシュ画面を無効にする)と(インストールされている-directlaunch
最新のMathematicaバージョンを起動するメカニズムを無効にする)をコマンドライン文字列に追加する関数:
customizeOpenCommand[id_String] := Module[{value},
value =
Cases[Developer`ReadRegistryKeyValues[
"HKEY_CLASSES_ROOT\\" ~~ id ~~ "\\shell\\open\\command"],
Verbatim[Rule][Null,
val_String /;
StringFreeQ[val, " -b -directlaunch "]] :> (Null ->
StringReplace[val,
path__ ~~ "\\Mathematica.exe\"" ~~ __ ~~ "\"%1\"" :>
path ~~ "\\Mathematica.exe\" -b -directlaunch \"%1\""])];
Developer`WriteRegistryKeyValues[
"HKEY_CLASSES_ROOT\\" ~~ id ~~ "\\shell\\open\\command", value]];
この関数は次のように使用できます。
customizeOpenCommand /@ installedVersions
3)現在の.NBファイルの関連付けを取得するための関数:
Null /. Developer`ReadRegistryKeyValues["HKEY_CLASSES_ROOT\\.nb"]
4)インストールされているすべてのMathematicaバージョンを切り替えるためのボタン(しかし、おそらくとを使っDynamic
てもっとうまく実装できると思いますSetterBar
):
Column[Button[
Row[{"Associate .NB-files with ", Style[#, Bold], " (",
First@Cases[
Developer`ReadRegistryKeyValues["HKEY_CLASSES_ROOT\\" ~~ #],
Verbatim[Rule][Null, str_String] :> str], ")"}],
Developer`WriteRegistryKeyValues["HKEY_CLASSES_ROOT\\.nb",
Null -> #], Alignment -> Left] & /@ installedVersions]
上記に加えて、インストールされている異なるMathematicaバージョン間でのプリファレンスの共有を無効にするコマンドがあります(デフォルトでは、インストールされているすべてのバージョンがフロントエンド設定を保存するために1つのファイルを使用します):
SetOptions[$FrontEnd, "VersionedPreferences" -> True]
だから私の問題は:
Palette
.NBファイルの現在のファイルの関連付けを動的に表示し、ボタンをクリックしてそれらを切り替えることができる小さなファイルを作成してインストールするにはどうすればよいですか?たぶんそれだけで実装できると思いますが、まだパレット作成のSetterBar
経験がありません。Dynamic