How My Heart Sings

Sun, 17 Aug 2008

KEditとosascript

ひさしぶりにまっきんの話題。iMac買うたので。

KEditで使うために、以下のようなものを書いてみました。KEditからosascriptを使う、というもののとっかかりです。

#!/bin/sh
`osascript << EOF
on run
        tell application "KEdit"
                if not (document 1 exists) then
                        beep
                        return
                end if
        end tell
end run
EOF`

…帰ってきません。KEditがハングします。この例なら素直にAppleScriptで書けば良いのですが…こんなテストをしようとしたのは、次のようなAppleScriptを書こうとして、途中で面倒になってきたからです。リストを表示させて、その値によって挿入する文字列を変えようとしたのは良いのですが、ここからif文を延々書いていかなきゃならないのか、case文とか使えたら良いのに、AppleScriptじゃなくShellScriptだったら、と。あ、この例では、リストの返り値をそのまま文字列として挿入しています。

set aResult to ""

tell application "SystemUIServer"
    activate
    try
        set myList to {
            "Language=czech", 
            "Language=german", 
            "Language=english", 
            "Language=spanish", 
            "Language=french", 
            "Language=italian", 
            "Language=japanese", 
            "Language=latin", 
            "Language=polish"}
        set aResult to (choose from list myList default items "Language=en") as string
    on error
        beep
    end try
    
end tell

tell application "KEdit"
    if not (document 1 exists) then
        beep
        return
    end if
    activate
    tell document 1
        set selectedText to selected text
        if selectedText is not "" then set aResult to selectedText
        set selected text to aResult
    end tell
end tell

Meta Infomation of this entry

You can add this Entry to your  はてなブックマーク and Delicious

Comments

Posted by karino at Sun Aug 17 21:06:29 2008
その使い方だといかにもデッドロックしそうですね… (^ ^;シェルの類は基本的に返事が返ってくるまで待機する仕様なので。

テキストの対応については、対応表を別のテキスフォファイルに格納して適宜読み出せばごちゃごちゃ分岐を書かなくて済む気がします。
Posted by やました at Sun Aug 17 21:27:46 2008
コメントありがとうございます。おひさしぶりです。

最初の書き方は動かないということですか?ああっ、そこらへんをもうすこし詳しく…
Posted by karino at Sun Aug 17 22:27:29 2008
AppleScriptはKEdit内部で同期的に動くのでロックしないんですが、シェルの類は一旦シェルにスクリプトを投げて、その結果が返るまでロックするんですよ。だから、ロック中にシェルからAppleScript経由でKEditに命令を出すとそこで止まっちゃうという。

Add Comment...

スパム対策のため、一ヶ月を経過したエントリにはコメントを書き込めないのです…後、http:と書くこともできません。

Name:

Comment:

Le violon intérieur....
Yasuo Yamashita
vaiorinnhiATTOnaDOTrimDOTorjye-pi-
Y.A.S.U.O Ytterbium Artificial Sabotage and Utility Organism Y.A.S.U.O Yelling Abomination from the Sunless Underground Oasis

Pyblosxom and plugins. For detail, see http://viole.sakura.ne.jp/blosxom/blosxom.cgi/plugin_info