キッズプレート、パスタおかわり

プログラミングやデジモノについてあれこれ
--.--.-- --:--|カテゴリ:スポンサー広告| コメント(-)

スポンサーサイト


上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
2009.06.17 00:53|カテゴリ:AppleScriptコメント(0)

CotEditorでお手軽にスクリプトを実行しちゃう


 さて本日はちょっとしたスクリプトをご紹介。

 遥か以前よりmacでperlを使っていた方々にとってはとっても懐かしいネタやもしれません。

 わたしはOS 9でPerlを実行する際にかの有名テキストエディタmiを使っておりました。MacJperlをインストールしたOS9マックでmiを実行し、miのスクリプトメニューから「macjperlで実行」「選択物に対して実行」(うろ覚え)なんていうメニューからperlを動かしては一喜一憂していたわけです。エディタから実行できて結構便利だったなあ。それに、MacJperlはドロップレットなんかも手軽に作れてよかったですよねえ。

 さてそんな懐かしい環境をふと思い出した私。テキストエディタでちょろっと入力してパパッと動かすという手軽な環境を作ってみようと思い立った訳です。使用するのは現在愛用しているCotEditor。AppleScriptやShellScriptがばりばり使えちゃうという(・∀・)カコイイ!!テキストエディタです。ちなみにこのブログの下書きにもばきばき使用しております。

 OS XでPerlを実行するには以下のような手順になります。

・テキストエディタでPerlスクリプトを作成
・作成したスクリプトファイルに実行権限を与える
・ターミナルを起動してスクリプトファイルを実行

「めんでぇ。MacJperlの手軽さはどこ言った!」

 確かに面倒です。ちなみに私は基本Unixあがりの人間なの逆にMacJperlの実行環境が楽ちんなだけなんだよー、とも思いますが。。。だけどまあやっぱ楽できるなら楽したほうがいいよね。さてでは上記の手順を実行するスクリプトを作って行きましょう。さがせばだれかがとっくに作っているだろけれど、まあ勉強の為にも自分で頑張ってみまする。

 じゃじゃん。てか、超長いので続きをご覧になりたいかたは、続きからどうぞ。スクリプトファイルの説明なんかいいからものだけ欲しいってひとはこちらからスクリプトを落としちゃってください。
CotEditorScript.dmg(10.4 PPC CotEditor0.9.6にて動作確認)

 それではさっそく作って行きましょう。ちなみにスクリプトはたうぜんAppleScriptです (。・x・)ゝ

「実行権(755)を与える.scpt」
--変数の初期化
set FilePath to ""

tell application "CotEditor"
set FilePath to path of document 0 as Unicode text
--保存してないと取得できない
if FilePath = "" then
display dialog "実行するにはファイルを一度保存してください" buttons {"OK"} default button "OK" with icon stop
return
end if
end tell

--ターミナルで実行します(ちょっと格好悪い)
tell application "Terminal"
activate
if window 0 exists then
set visible of window 0 to true
do script "chmod 755 \"" & FilePath & "\"" in window 0
else
do script "chmod 755 \"" & FilePath & "\""
end if
end tell

 処理の内容ですが、
「tell application "CotEditor"」内にある、
「set FilePath to path of document 0 as Unicode text」
 で現在CotEditorで編集しているファイルのPOSIX pathが取得できちゃいます。わお、お手軽でグッド。ということであとは
「tell application "Terminal"」
 でターミナルをtellして、
「do script "chmod 755 " & FilePath in window 0」
 なんて感じでchmodを実行します。そうです、

「AppleScriptと言いながら結局はターミナルにコマンドをビシバシ投げてるだけ」

 です。でもまあ、こんなハイブリッドな処理ができるんでやっぱAppleScriptは楽チンだよね。ちなみに「in window 0」にしちゃってるので気をつけてください。

 えー、既にこのスクリプトの中身をみただけで次のスクリプトの中身までわかってしまいますね。でもまあ、次行ってみよう。

「ターミナルで実行.scpt」
--変数の初期化
set FilePath to ""
set FileName to ""

tell application "CotEditor"
set FilePath to path of document 0 as Unicode text
set FileName to name of document 0 as Unicode text
--保存してないと取得できない
if FilePath = "" then
display dialog "実行するにはファイルを一度保存してください" buttons {"OK"} default button "OK" with icon stop
return
end if
end tell

--ターミナルで実行します(ちょっと格好悪い)
tell application "Terminal"
activate
if window 0 exists then
set visible of window 0 to true
do script "cd " & "`dirname \"" & FilePath & "\"`;" & FileName in window 0
else
do script "cd " & "`dirname \"" & FilePath & "\"`;" & FileName
end if
end tell

 うわー、ほとんど一緒。さてこのスクリプトのポイントは「do script」の部分です。私の手抜き加減が伺えます。
 今回スクリプトの実行に際して最初はフルパスで指定して実行していたんですがその場合スクリプト内でのカレントパスが変わってくるのでスクリプトの親フォルダに移動してからスクリプトを実行することにしました。スクリプトの親フォルダに移動している部分が、

「"cd " & "`dirname " & FilePath & "`;"」

 の部分です。まあ見にくいので見易いようにダミーで書き直しますと、

「cd `dirname /user/hirakun/Sample.pl`」

 みたいな感じです。dirnameというコマンドは渡された文字列からファイル名だけを取り除くターミナルのコマンドです。このコマンドの結果をバックスラッシュエスケープで文字列に展開し、cdに渡しています。こうするとPOSIX path文字列で指定されたファイルの親フォルダにぽーんと移動できるわけです。一方dirnameに対してファイル名だけを取得するbasenameというコマンドもあります。スクリプトの実行にbasenameを利用してexecコマンドにその文字列を渡せば実行できるんですが、execで実行するとターミナルウィンドウの再利用ができなくなってまうようです。てことで、お手軽にCotEditorでドキュメントファイル名を取得しています。

 さて最後にFinderの選択物に対してスクリプトを実行するスクリプトです(ややこしい)。これもほとんど中身は同じですね。
「選択物に対して実行.scpt」
--変数の初期化
set FilePath to ""
set SubFilePath to ""

--Finderから選択物の POSIX path を取得します
tell application "Finder"
if (count (get selection)) > 0 then
repeat with object in (get selection)
set myPath to object as Unicode text
set myPath to POSIX path of myPath
set SubFilePath to (SubFilePath & " \"" & myPath & "\"")
end repeat
else
display dialog "最前面のFinderウィンドウでアイテムを選択してください" buttons {"OK"} default button "OK" with icon stop
return
end if
end tell

tell application "CotEditor"
set FilePath to path of document 0 as Unicode text
set FileName to name of document 0 as Unicode text
--保存してないと取得できない
if FilePath = "" then
display dialog "実行するにはファイルを一度保存してください" buttons {"OK"} default button "OK" with icon stop
return
end if
end tell

--ターミナルで実行します(あいかわらず格好悪い)
tell application "Terminal"
activate
if window 0 exists then
set visible of window 0 to true
do script "cd " & "`dirname \"" & FilePath & "\"`;" & "\"" & FileName & "\"" & SubFilePath in window 0
else
do script "cd " & "`dirname \"" & FilePath & "\"`;" & "\"" & FileName & "\"" & SubFilePath
end if
end tell

 このスクリプトのポイントは以下の二行です。

set myPath to object as Unicode text
set myPath to POSIX path of myPath

 一行目でFinderの選択アイテムオブジェクトからパス文字列を取得します。このパスは昔ながらの「:(コロン)」で区切られたマック形式のパスなのでこのパス文字列を二行目の「POSIX path of~」でPOSIX形式に変更しています。あとはこここで取得したパス文字列をスクリプトファイル名に半角スペース区切りで渡して実行するだけです。

 思いのほか長くなってしまった。。。( ;´・ω・`)人(´・ω・`; )

 例のごとく今回紹介したスクリプトはこっちに置いておきますのでご入用のかたはどうぞ。

 CotEditorを起動するとメニューバーにスクリプトマークのメニューがあるので「スクリプトフォルダを開く」で表示されるフォルダに保存してください。「スクリプトメニューを更新」でメニューに表示されるはずです。

 簡単に実行手順を書きますと、
・CotEditorで新規作成して適当な名前で保存
Ex.
#!/usr/bin/perl
print $ARGV[0];

・スクリプトメニューから「実行権限を与える」を実行
 →ターミナルウィンドウが起動してchmodが実行されます
・スクリプトメニューから「ターミナルで実行」又は「選択物に対して実行」を実行
 →ターミナルウィンドウでスクリプトが実行されます

 まあたいそうな代物じゃあない簡単なスクリプトなので適当にあしらってください。再配布もなんにも特に制限ございません。てかいっかいターミナルの画面呼び出しちゃえば「!!」が一番早いよね?

CotEditorScript.dmg(10.4 PPC CotEditor0.9.6にて動作確認)

 ちなみに今回のスクリプト、編集中ドキュメントのPOSIX path がとれればいいだけなんでCotEditorの部分を他のエディタに置き換えればそのまま他のエディタでも使えます。それこそmiやJEditでもちょろっと修正しちゃえば使えますので是非お試しください。

 CotEditor絡みのスクリプティングネタを新たに追加しましたので、そちらも参考にどうぞ

 文字列に自動で連番を付与して配列にしちゃうスクリプト
コメントの投稿












管理者にだけ表示を許可する
トラックバック
この記事のトラックバックURL

プロフィール

ひらくん Author:ひらくん
どもども、ひらんくんどす。
日々まったり過ごしております。
仕事はDTP関連のスプリクト&アプリケーション開発。
Follow happyscript on Twitter

ブログ内検索



上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。