2014年10月19日日曜日

一時コマンド+たまに使うコマンドメニュー


挨拶


「普段は使わないが、たまに使いたくなるコマンド」というものがある。

  • カーソル下のフォルダの階層を減らしたい(*chopdir %FCD)
  • カーソル下のファイルの文字数をカウントしたい(*script %0\Script\wordcount.js)
  • 両窓でファイルを比較したい(*comparemark 23,B00111,0)

などなど。これらについては、一々どこかのキーに割り振っても、普段使わないからどうせ忘れてしまう。

また、これらを小物メニューとしてまとめて何かのキーに割り振る、というのもしたくない。例えば*chopdirは、使用する必要があるときは連続で使用したい場合が多い。マトリョーシカみたいにフォルダの中にフォルダが入っている状況で、それを整理したい時など。このようなときは、そのフォルダをワンキーでチョップしまくりたい。一々メニューを出して選択して、を繰り返すのは億劫だ。

そこで、これまでは、一時コマンドにこれらのコマンドを登録して使う、ということをしていた(参考:一時的にキーにコマンドを登録)。だが、一々コマンドを思い出すなり調べるなりしてから打ち込む、というプロセスを挟む必要があるのが面倒だった。

そこで


このプロセスをメニューで省略することにする。

一時的にキーにコマンドを登録 では、

1.C-z z(Ctrl+Zを押したあとZを押す)で一行編集を出し、コマンドをセット



2.C-z C-z(Ctrl+Zを二回押し)でセットしたコマンドを実行

の二段階により、一時的に使用したいコマンドを実行していた。

ここに今回新たに、

  • たまに使うコマンドを集めたメニューを作成、それを選択すれば一時コマンドにセットされる

プロセスを追加する。これで、よく使うコマンドを一々思い出して打ち込む必要が無くなる。

メニューで選択して一時コマンドをセット、連続して実行してる時は、その時々の状況に応じて、火属性のカード、あるいは水属性のカードをメインウェポンのデッキに装着。すると、メインウェポンからはそれに応じた攻撃魔法が出るようになるので、パシュパシュ打ち込む、みたいなのをイメージしてる(カッコイイ)。

やりかた


以下を編集して取込

-|K_launcher =
-|M_launchmenu =

M_launchmenu = { ** comment **
&addmenu = *set name=%"登録名を入力してください"%{test%} %: *setcust M_launchmenu:%'name'=*alias temp_cmd = %'temp_cmd'
-- = 
&chopdir = *alias temp_cmd = *chopdir %%FCD
文字数カウント = *alias temp_cmd = *script %%0\Script\wordcount.js
ファイルの比較 = *alias temp_cmd = *comparemark 23,B00111,0
}

KC_main = { ; PPcメイン窓
^Z ,*setnextkey K_launcher
}

K_launcher = { ** comment **
Z ,*alias temp_cmd = %"一時コマンド"%{%'temp_cmd'%}
^Z ,*execute ,%'temp_cmd'
',' ,%M_launchmenu,a
}


M_launchmenuに、たまに使いたいコマンドを幾つか登録してます。このメニューに登録したコマンドをセットしたいときは、C_z,","(Ctrl+Zを押してから、","を押す)。するとメニューが出るので、適当なものを選択。



すると、一時コマンドのエイリアスがこれに置き換わります。C_z,z(Ctrl+Zを押してからZを押す)で一行編集を開けば、一時コマンドが置き換わってるのが分かるはず。例えばchopdirを選んだのなら



こうなる。

あとは、C_z,C_z(Ctrl+Zを二回押し)で実行するだけ。

また、addmenuで、今一時コマンドにセットしているコマンドを新たにメニューに追加できるようにしている。


追記 2014-10-23


一時コマンドに%0などのマクロが含まれていると、addmenu時にそれが展開されてしまうようだ。例えば

*script %0\Script\hoge.js


*script D:\PPx\Script\hoge.js

として登録されてしまう。
これを避けるためには、addmenuの箇所を以下のようにかえる。
&addmenu = *set name=%"登録名を入力してください"%{test%} %: *setcust M_launchmenu:%'name'=*alias temp_cmd = %*regexp(%'temp_cmd',"s/%%/%%%%/")

%を%%に置換しているだけ。

2014年10月15日水曜日

文字数のカウント

カーソル上のテキストファイルの文字数をカウントするスクリプト。文字数を気にする類の文章を書いている時に使えるかもしれない。

やり方


以下をScriptフォルダに保存

wordcount.js

//!*script

var objItem = PPx.Extract("%FCD");
var objFileSys = new ActiveXObject("Scripting.FileSystemObject");

// .txtか.howm以外なら終了
if (!objFileSys.GetExtensionName(objItem).match(/txt$|howm$/i)) {
  PPx.Quit();
}

objInFile = objFileSys.OpenTextFile(objItem, 1);
PPx.Execute("*linemessage " + objInFile.ReadAll().length);
objInFile.Close();


以下のコマンドを適当なキーに登録する。

*script %0\Script\wordcount.js


PPc上で実行すれば、情報行に文字数が表示される。




PPv上でも実行可能。


2014年10月3日金曜日

PPvのフォントサイズ変更を記憶

PPvでは、INSキーを押すとフォントサイズが拡大し、DELを押すと縮小する。これは一時的であり、一度PPvを終了すると元の大きさに戻ってしまう。
そこで、終了しても変更したフォントサイズを記憶するようにする。


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

fontfix.js

//!*script 
// 第一引数がpならPPvのフォントを大きく
// 第一引数がmならPPvのフォントを小さく


// 引数がなければ終了
if (PPx.Arguments.Length < 1){
  PPx.SetPopLineMessage("引数が正しくありません。");
  PPx.Quit(-1);
}

// 現在のフォントサイズを取得
var hoge = PPx.Extract("%*getcust\(F_fix\)").split( "," );
var i = parseInt(hoge[0]);

// フォントサイズの箇所を入れ替える
hoge.shift();
if (PPx.Arguments.Item(0) == "m"){
  hoge.unshift(i + 1);
} else if (PPx.Arguments.Item(0) == "p"){
  hoge.unshift(i - 1);
} else {
  hoge.unshift(i);
}

// 部分カスタマイズを実行
PPx.Execute("*setcust F_fix =" + hoge);


以下を編集して取込。

KV_page = { ; PPvテキスト(ページ)追加設定
INS ,%K"@INS" %: *script %0\Script\fontfix.js,p
DEL ,%K"@DEL" %: *script %0\Script\fontfix.js,m
}