2013.02.01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28

MHI 5.0

この「にっき」には暴力シーンやグロテスクな表現が含まれています。

(2013.02.02)

$ NYAOS 3.3.4_2 を公開しました

NYAOS.ORG - NYAOS 3000

以上、よろしくお願いいたします。

$ NYAOS内蔵Luaでショートカットを自動で作る

仮想環境を何個も作ってると、いちいちツールを展開するのが面倒なので、 バッチファイル一発で NYAOS と vim と UNIX Like Tools を所定フォルダーに展開する テンプレートを作ろうとしています。

が、ショートカットをどうしようかと思いました。 わたしの場合、いつも「デスクトップ」と「送るメニュー」に NYAOS と gvim のショートカットを作っているのですが、 結構手間がかかりますから、当然自動化したい。

ググってみると Windows Script Host で出来るみたいなので、NYAOS内蔵Luaでもいけそうです。 というわけで、動作を確かめながら、ちょっとずつ作ってみましょう。

local shell=nyaos.create_object("WScript.Shell")
local desktop=shell.SpecialFolders:Item("MyDocuments")
print(desktop)

なんか、落ちたーー

NYAOSのCOM処理がバグっているようです。

正直、原因解明にはかなり手間取ると覚悟していたのですが、 デバグ行を入れながら場所を特定してみると、 SysFreeString で落ちていたので、 単なるポインタの初期化漏れだったようです (API の Invoke が NULL を代入してくれると思ったんだよぉぉぉ) 。 あっさり見付かってよかったよかった。

気をとりなおして、できたての NYAOS 3.3.4_2 でやり直します。 で、出来たのが以下のスクリプト

shortcut.lua:

function create_shortcut(shell,src,dst)
    local shortcut=assert(shell:CreateShortcut(src))
    shortcut.TargetPath=dst
    shortcut:Save()
end

local shell   = assert(nyaos.create_object("WScript.Shell"))
local desktop = assert(shell.SpecialFolders:Item("Desktop"))
local sendto  = assert(shell.SpecialFolders:Item("SendTo"))

local fileset = {
    { "Nihongo Yet Another Open Shell" , "c:\\usr\\bin\\nyaos.exe" } ,
    { "GVim" , "c:\\usr\\vim73-kaoriya-win32\\gvim.exe" } ,
}

for i,e in ipairs(fileset) do
    create_shortcut(shell , desktop.."\\"..e[1]..".lnk" , e[2])
    create_shortcut(shell , sendto .."\\"..e[1]..".lnk" , e[2])
end
$ nyaos shortcut.lua

「デスクトップ」と「送るメニュー」に、それぞれ nyaos.exe と gvim.exe へのショートカットができました。

うむ、ばっちそ

.net(3) C++(3) Cygwin(12) GAME(3) Groovy(1) Linux(2) Lua(39) Mercurial(13) NYAOS(92) OS/2(7) Oracle(3) Perl(4) Python(22) SKK(4) Windows8(1) album(68) ckw(10) coLinux(1) vim(6) wifky(27) 書評(21) (9)

zetamattaのたいじゅー