画像をローカルに保存するのが面倒なときのために。 以下を編集して取込。
_Command = {
wget2file = *string o,hoge=%*temp(name,f)
%Os wget -O %so"hoge" %*arg(1)
*return %so"hoge"
}
以下のようにして使う。
*ppv %*wget2file("https://pbs.twimg.com/media/F0vVsgTaYAsUHkA?format=jpg")
画像をローカルに保存するのが面倒なときのために。 以下を編集して取込。
_Command = {
wget2file = *string o,hoge=%*temp(name,f)
%Os wget -O %so"hoge" %*arg(1)
*return %so"hoge"
}
以下のようにして使う。
*ppv %*wget2file("https://pbs.twimg.com/media/F0vVsgTaYAsUHkA?format=jpg")
僕はhowm形式でメモを取っている(参考:moe | メモの方法論)。howmファイルの一行目をコメントにするスクリプトを利用して、以下のようにタイトルを表示している。
このメモの中から、^[W]でファイル検索をすることがあるのだが、その結果は次のようになる。
00_INDEX.TXTで紐づけたコメントは、当然ListFileでは反映されない。 タイトルが表示されない分視認性は低いが、そもそもあまり検索することもないし、特に不便だとも思ってなかったので、ずっと放置していた。
最近気付いたのだが、X_jinfcを使えばこの問題を解決することができる。X_jinfcを使うと、ダイアログ完了時にコマンドを実行することができる。
以下をScriptフォルダに保存。これはhowmファイルからタイトルを取得するスクリプト。
以下を編集して取込。
X_jinfc = {
whereiscompcmd = *ifmatch "/D:\\work\\memo/",%1 %: *comment all extract,%(%*script(%0Script\gethowmtitle.js,%FCD)%)
}
これで、D:\work\memo以下で^[W]による検索をした場合、howmファイルから自動でタイトルを取得し、それをコメントにしてくれる。
一番上の「.」「..」がコメント表示になってなくて気になる場合は、以下をScriptフォルダに追加で保存してから
以下を編集して取込すればいい。
X_jinfc = {
whereiscompcmd = *ifmatch "/D:\\work\\memo/",%1 %: *comment all extract,%(%*script(%0Script\gethowmtitle.js,%FCD)%) %: *script %0Script\dotcomment.js
}
EVENTで*stopを使うと、*linecustと相性が悪い場合があるので、代わりに*gotoを使う話です。
FIRSTEVENTやLOADEVENTで、*ifmatchと*stopを使って条件分岐をすることは、よくあることだと思う。以下はPPC起動時に、IDが[A]ならhogeを、それ以外ならfugaをメッセージ表示する設定。
KC_main = { ; PPcメイン窓
FIRSTEVENT ,*ifmatch CA,%n %: *linemessage hoge %: *stop
*linemessage fuga
}
これだと、後で別の設定を*linecustで追加しようとした時、困ったことが起きる。例えば、PPC起動時にメッセージウインドウを表示しようとして、以下のコマンドを実行したとする。
*linecust homu,KC_main:FIRSTEVENT,%%I"hello world"
すると、FIRSTEVENTは以下のようになる。
KC_main = { ; PPcメイン窓
FIRSTEVENT ,*ifmatch CA,%n %: *linemessage hoge %: *stop
*linemessage fuga
%mhomu %I"hello world"
}
これでは、想定した通りの動きにならない。起動したPPCのIDが[A]の時、一行目で処理が止まるからだ。手動で処理の順序をいじったりすれば解決するかもしれないが、そういうややこしいことはできればしたくない。
*stopの代わりに*gotoを使えば、この問題は解決しそうだ。
KC_main = { ; PPcメイン窓
FIRSTEVENT ,*ifmatch CA,%n %: *linemessage hoge %: *goto Last
*linemessage fuga
%mLast
}
これなら、*linecustで追加した処理が無事実行されることになる。
KC_main = { ; PPcメイン窓
FIRSTEVENT ,*ifmatch CA,%n %: *linemessage hoge %: *goto Last
*linemessage fuga
%mLast
%mhomu %I"hello world"
}
*linecustが使いやすくなる分だけ、*stopよりも*gotoの方が少しお得。これがホントのgoto EVENTってやつですねw
:y=-( ゚д゚)・∵;; ターン
PPxで使うスクリプトをES6に移行する方法です。 ほえほえ日記のスクリプトも、今後は基本的にES6で書くつもりです。
WSH Script Module(旧名Script Module)を最新バージョンにする。R21+1でPPx.Enumeratorが使えるようになるので、それ以前のバージョンを使っているならアップデートは必須。PPx本体も最新のものにしておく。
ES6では使えないオブジェクトがいくつかある(参考:WSH JScript で利用できる機能まとめ | なたで日記)。おそらく問題になるのはActiveXObjectとEnumeratorの2つ。以下のように修正する。
JScript
var e = new Enumerator(FileCollection);
var fso = new ActiveXObject('Scripting.FileSystemObject');
ES6
var e = PPx.Enumerator(FileCollection);
var fso = PPx.CreateObject('Scripting.FileSystemObject');
以下を編集して取込した後、PPxを再起動する。
_Others:usejs9=4
僕は、補完候補ファイルに記述したコマンドを、一行編集から呼び出して使っている。これだと「あれ、あのコマンドどのキーに登録したっけ」ということがなくなり、便利なのだ。
今回行うのは、一行編集上での疑似自動補完の切り替え。
以下を編集して取込。補完候補ファイルはPPxフォルダ内のlaunch.txtという想定。
_Command = { ; ユーザコマンド・関数
ppl2 = *ifmatch 0,0%*getcust(_User:ppx_keymode) %: *setcust _User:ppx_keymode=K_pplnormal
*string o,name=%*input("" -title:"%*substring(%*getcust(_User:ppx_keymode),5) mode ^Rで実行コマンド切り替え" -mode:h -leavecancel -k:"*completelist -file:%%0launch.txt -match:6 -detail:""hist:h user alias"" %%: *mapkey use,%*getcust(_User:ppx_keymode)")
*execute,%so"name"
}
-|K_pplnormal=
-|K_pplautocorrect=
K_pplnormal = {
ENTER ,%K"@ENTER"
^R ,*mapkey delete,K_pplnormal
*mapkey use,K_pplautocorrect
*setcust _User:ppx_keymode=K_pplautocorrect
*setcaption auto correct mode
}
K_pplautocorrect = {
ENTER ,*ifmatch -1,%*sendmessage(%N-L,392,0,0) %: %K"@DOWN @ENTER" %: *stop
%K"@ENTER"
^R ,*mapkey delete,K_pplautocorrect
*mapkey use,K_pplnormal
*setcust _User:ppx_keymode=K_pplnormal
*setcaption normal mode
}
*ppl2を実行すると一行編集が起動する。[^R]で疑似自動補完のオンオフが切り替わる。現在の状態はタイトルバーで確認できる。新規にコマンドを実行したい時はnormalに。既存のコマンドを実行したい時はauto correctにするといいだろう。