2016年12月21日水曜日

動的メニューの考察その2


//!*script

// メニューの削除
PPx.Execute("*setcust -|M_hoehoe =");

// メニュー項目の登録
PPx.Execute('*setcust M_hoehoe:項目その(&1)=echo hoge');
PPx.Execute('*setcust M_hoehoe:項目その(&2)=*linemessage hoge');

このようなスクリプトを作り、

*script %0\Script\hoe.js %: %M_hoehoe

とコマンドを実行することで、メニューを動的に変更することができる。
例えば

  • %*getcust()で取得したカスタマイズ状況
  • エイリアス
  • フォルダ内のファイル

等に応じて、その時々で異なるメニューを表示できるわけだ。

今まではメニューの表示もスクリプト内に含めていたが、これを分離したほうが、動的メニューを他のメニューの一階層として使えたりして、よりいいんじゃないかと思うようになった。

参考





2016年12月17日土曜日

コピー/移動/解凍先フォルダ選択を別窓で

Paper Plane xUI まとめサイトにある


を、一行編集を開かずにできるようにする。

例えば、移動させたいファイルをマークした後、Shift+Mを押せばPPC[Z]が起動。



PPC[Z]で移動先フォルダを表示した後、Shift+Enterを押せば、そこにマークファイルが移動し、PPC[Z]を閉じる。


準備


以下を編集して取込。解凍に使っているwrap_7zG.jsについては



を参照。

KC_main    = {
ESC    ,*ifmatch /C[A-Y]/,%n %:%K"@ESC"%:*stop
        *ifmatch CZ,%n %:%K"@Q"
\M    ,*ifmatch /C[A-Y]/,%n %: *alias ppcz_cmd = *file !move ,%%*extract(%n"%%%%@*8FCDN"),%%1 %: *ppc -bootid:z -single
\C    ,*ifmatch /C[A-Y]/,%n %: *alias ppcz_cmd = *file !copy ,%%*extract(%n"%%%%@*8FCDN"),%%1 %: *ppc -bootid:z -single
\U    ,*ifmatch /C[A-Y]/,%n %: *alias ppcz_cmd = *script %0Script\wrap_7zG.js,%%*extract(%n"%%%%a8FDC"),%%1 %: *ppc -bootid:z -single
\ENTER    ,*ifmatch CZ,%n %: *execute ,%'ppcz_cmd' %: %K"@Q" %: *stop
    %K"@\ENTER"
}


やり方


処理元のファイルをマークする。ファイルが一つのみの場合はカーソルをあわせるだけでもいい。



  • 移動:Shift+M
  • コピー:Shift+C
  • 解凍:Shift+U

を押すと、PPC[Z]が開く。




この窓で処理先のフォルダを表示したのち、Shift+Enterを押す。すると、カレントフォルダにマークファイルが移動/コピー/解凍したのち、PPC[Z]が閉じる。

2016年12月5日月曜日

複数の設定をメニューで切り替え

僕は今、PPxを1画面タブ型メインで使っているが、たまに2画面型や独立窓型も使いたくなったりする。
そこで、それぞれの設定ごとにCFGファイルを用意しておき、簡単に切り替えられるようにする。


準備


PPxフォルダにCFGFILEフォルダを作り、そこに使い分けしたいCFGファイルを移動する。



以下をScriptフォルダに保存。

CFGmenu.cfg

//!*script
// CFGファイル取込用メニュー

fs = PPx.CreateObject("Scripting.FileSystemObject");
var objFileSys = new ActiveXObject("Scripting.FileSystemObject");
var fn = PPx.Extract('%0')+"CFGFILE";

// フォルダの有無をチェック
if (objFileSys.FolderExists(fn) == false) {
    PPx.Echo(fn+"は存在しません");
    PPx.Quit(-1);
}

// メニューの削除
PPx.Execute("*setcust -|M_hoehoe =");

// フォルダリストを取得し動的メニューの登録
objFolder = objFileSys.GetFolder(fn);
e = new Enumerator(objFolder.Files); 
for( ; !e.atEnd(); e.moveNext()) {
  var basename = objFileSys.GetBaseName(e.item().Name);
  var filepath = fn+"\\"+e.item().Name;
  PPx.Execute('*setcust M_hoehoe:'+basename+'=%Ob *PPCUST CS '+filepath);
}

// メニューを開く
PPx.Execute("%M_hoehoe");

以下を編集して取込。

-|M_Omake =
-|M_BgType =
-|M_cust =

M_cust    = { ** comment **
カスタマイザ(&C) = %K"@CUSTOMIZE"
編集して取込(&E) = %Ob *PPCUST /edit
-- = 
取り込み(&1) = %Q"%FCを取り込みます"%:%Ob *PPCUST CS "%FCD"
追加(&2) = %Q"追加取込します"%:*customize @%FCD
-- = 
CFGFILEに書き出し(&3) = %Ob *PPCUST CD %0\CFGFILE\%${%*getcust(_User:SAVEDATA)%}.CFG %: *setcust _User:SAVEDATA=%${%*getcust(_User:SAVEDATA)%}
CFGFILEから読み込み(&4) = *script %0\Script\CFGMenu.js
指定書き出し(&5) = %"指定ファイルに書き出します"%Ob *PPCUST CD %{%1\PPX-%*nowdatetime(y-N-D)%|.CFG%}
-- = 
初期化(&I) =  %Q"初期化します"%:%Ob *PPCUST CINIT
-- = 
壁紙の設定(&W) = %M_Omake
窓オプション(&O) = %K"@C_WIND"
-- = 
再起動(&R) =  *closeppx %: *ppc
アップデート(&U) = %Ob *checkupdate p
バージョン情報(&V) = %K"@ABOUT"
}

M_Omake    = {    ** comment **
壁紙を表示する位置(&T) = %M_BgType
壁紙を明るさ(&B) = *customize X_bg:Bright=%"明るさ(Bright)"%{%*getcust(X_bg:Bright)%}
壁紙を透明度(&O) = *customize X_bg:Opaque=%"透明度(Opaque)"%{%*getcust(X_bg:Opaque)%}
}

M_BgType    = {    ** comment **
しない = *customize X_bg:Type=0
左上 = *customize X_bg:Type=1
右上 = *customize X_bg:Type=3
デスクトップと同じ = *customize X_bg:Type=10
一体化窓内でつながるように調整 = *customize X_bg:Type=20
}

KC_main = { ; PPcメイン窓
F12 ,%M_cust,C
}
KV_main = { ; PPcメイン窓
F12 ,%M_cust,C
}

やり方


F12を押すと、カスタマイズ用メニューが表示される。



「CFGFILEから読み込み」を選択すると、CFGFILEフォルダ内のファイルがメニュー表示される。選択すると、その設定を取り込む。





「CFGFILEに書き出し」を選択すると、一行編集ダイアログが表示されるので、適当な名前を入力する。これで、現在の設定をCFGFILEフォルダに保存する。入力した名前は_User:SAVEDATAに保存され、次回「CFGFILEに書き出し」選択時のデフォルト名になる。