How My Heart Sings

Thu, 23 Jun 2005

CotEditor用のスクリプトを書いてみるそのろく

これが最終形態ということにしようと思ったら、マーク付けした日本語テキストが文字化けしてしまう…どうも、最後にApplescriptの方に持っていった後の処理に問題があるみたい。${OUTPUT}をそのままechoした場合には文字化けしないので。スーパーハカーの人、誰か教えてくださると嬉しいです…それにしても、今まで日本語文でテストしてなかった自分に腹が立つというか。


#! /bin/sh
# %%%{CotEditorXInput=Selection}%%%
# %%%{CotEditorXOutput=ReplaceSelection}%%%
INPUT=`cat - `
OUTPUT="<em>${INPUT}</em>"

osascript << EOF
tell application "CotEditor"
    activate
    if exists front document then
        set {loc, len} to (range of selection of front document)
        set (contents of selection of front document) to "${OUTPUT}"
        set numOfMove to (count of character of selection)
        set (range of selection of front document) to {Loc + numOfMove, 0}
    end if
end tell
EOF

Meta Infomation of this entry

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

Wed, 22 Jun 2005

CotEditor用のスクリプトを書いてみるそのごぉ

CotEditor用のスクリプトの話しのつづき。添付のシェルスクリプトの例では、最前面のドキュメントにおいて選択範囲が無い場合、何も出力されません。自分としてはそうでないほうが望ましい。ということで、でわさっそく…最初のものは添付のシェルスクリプトです。

#! /bin/sh
# %%%{CotEditorXInput=Selection}%%%
# %%%{CotEditorXOutput=ReplaceSelection}%%%

INPUT=`cat -`
echo "<h1>${INPUT}</h1>"

処理の流れは次のようにしてみました。…何かかっこわる。地の文を書いてそれをマークアップしてゆくわけだし、絶対選択範囲はあるわけで、別に細かいことを考えなくても良いかぁ…そうすれば前半部分はばっさり捨てることが出来るな。

  1. 最初に、選択範囲の長さを${lengthofSelection}に格納
  2. ${lengthofSelection}がゼロでない場合とゼロの場合とで処理を分岐する
#! /bin/sh
# %%%{CotEditorXInput=Selection}%%%
# %%%{CotEditorXOutput=ReplaceSelection}%%%


lengthofSelection=`osascript << EOF
    tell application "CotEditor"
        if exists front document then
            set {Loc,len} to (range of selection of front document)
        else
            beep
        end if
    return Len
end tell
EOF`

if [ "$lengthofSelection" != 0 ]; then
    INPUT=`cat - `
    OUTPUT="<blockquote cite=\\\"\\\" title=\\\"\\\">\n${INPUT}\n</blockquote>\n"
else
    OUTPUT="<blockquote cite=\\\"\\\" title=\\\"\\\">\n\n</blockquote>\n"
fi
    
osascript << EOF
tell application "CotEditor"
    activate
    if exists front document then
        set {loc, len} to (range of selection of front document)
        set (contents of selection of front document) to "${OUTPUT}"
        set numOfMove to (count of character of selection)
        set (range of selection of front document) to {Loc + numOfMove, 0}
    end if
end tell
EOF

Meta Infomation of this entry

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

Sun, 19 Jun 2005

CotEditorに対する瑣末な指摘

例えば、ScriptMenuフォルダにvar....shという名前のファイルを置くと、Scriptメニューにvar..という名前で表示されてしまいます。いっこ足りない。

拡張子を取り去るところのロジックがおかしいようです。いや、何が言いたいかというと、まっきんのメニューらしく、これを選択すると何か応答を求められますよ、という意味でてんてんてんていうのを出したいわけです。前のエントリーでそういうスクリプトを書いたので。

CotEditorKEditよりもAppleScript対応度が高いのと、スクリプトのエラーをScript Error Windowに吐いてくれるのが気に入ったので、さて、乗り換えの準備をしましょうかね。手間はかかるけど…

Meta Infomation of this entry

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

Sat, 18 Jun 2005

CotEditor用のスクリプトを書いてみるそのよん

CotEditor用のスクリプトの話しのつづき。前からやってみたかった、AppleScriptでダイアログとかを出してその結果によってShell Scriptの処理を分岐させて…というのを考えてみました。お題は数値文字参照。

処理の流れは次の通りで出来た。リストの画面でキャンセルを押した場合の挙動が他の場合(ダイアログとか)と違っているので、少し悩みました。うーむ、もっとかっこいいダイアログを出せないものだろうか。それと、メンテナンスするのに、常に二箇所修正しないといけないな…

  1. AppleScriptでリストを表示
  2. 選択結果を変数${UIINPUT}に格納
  3. 変数${UIINPUT}の値をもとに、変数${OUTPUT}に対応する数値文字参照の値を代入
  4. CotEditorの選択範囲を変数${OUTPUT}に置換
  5. キャレットを選択範囲の文字数分後へ移動
#! /bin/sh
# %%%{CotEditorXInput=Selection}%%%
# %%%{CotEditorXOutput=ReplaceSelection}%%%

UIINPUT=`osascript << EOF
tell app "SystemUIServer"
    activate
    try
        set myList to {\
            "&", \
            "<", \
            ">", \
            "nb space", \
            "copyright sign", \
            "registered sign", \
            "inverted !", \
            "inverted ?" \
            }
        set myResult to (choose from list myList default items "&")
    on error
        beep
    end try
    return myResult
end tell
EOF`

case ${UIINPUT} in
    false)             OUTPUT=""         ;;
    \&)                OUTPUT="&nbsp;"   ;;
    \<)                OUTPUT="&lt;"     ;;
    \>)                OUTPUT="&gt;"     ;;
    "nb space")        OUTPUT="&nbsp;"   ;;
    "copyright sign")  OUTPUT="&copy;"   ;;
    "registered sign") OUTPUT="&reg;"    ;;
    "inverted !")      OUTPUT="&#x00a1;" ;;
    "inverted ?")      OUTPUT="&#x00bf;" ;;
esac

osascript << EOF
tell application "CotEditor"
    activate
    if exists front document then
        set {loc, len} to (range of selection of front document)
        set (contents of selection of front document) to "${OUTPUT}"
        set numOfMove to (count of character of selection)
        set (range of selection of front document) to {Loc + numOfMove, 0}
    end if
end tell
EOF

Meta Infomation of this entry

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

Tue, 14 Jun 2005

CotEditor用のスクリプトを書いてみるそのさん

ひとつ前のエントリーではAppleScriptのなかにShell Scriptを埋め込んだ例を書きました。今回は、逆の方向で。こっちも試さないとね。

#! /bin/sh
# %%%{CotEditorXInput=Selection}%%%
# %%%{CotEditorXOutput=ReplaceSelection}%%%

INPUT=`/usr/bin/perl -e '
if ($0 eq __FILE__) {
    print &Bdate."\n";
}

sub Bdate
{
    local($time) = @_;
    local($beat);
    $time = $time || time;
    local($sec, $min, $hour) = (gmtime($time+60*60*1))[0..2];
    $beat = ((($hour * 60 + $min) * 60 + $sec) / 86.4) % 1000;
    sprintf("@%03d",$beat);
}
1;'`

osascript << EOF
tell application "CotEditor"
    --activate
    if exists front document then
        set {loc, len} to (range of selection of front document)
        set (contents of selection of front document) to "${INPUT}"
        set numOfMove to (count of character of selection)
        set (range of selection of front document) to {Loc + numOfMove, 0}
    end if
end tell
EOF

あ、こんなふうに変数をAppleScriptに渡せるのか。こちらのほうが色々簡単ですかね。AppleScriptの部分は括弧で括ると少しは見易くなるような気がする。

Meta Infomation of this entry

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

<<  Page 7 of 35  >>

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