[俺日記]

CotEditor 0.7.0 / 2005-07-11 (月)

AYNiMacさんで、プレーンテキストエディタのCotEditor 0.7.0が公開されていた。前のバージョン(0.6.5)からKEdit.appに代わって私のDockのFinderの右隣に鎮座しているのだが、実は前バージョンでAppleScript上の不具合を発見、報告したつもりでいたが、どうも報告してなかったらしい&直ってないので報告と回避策をば。

で、以下検証。CotEditorで新しい書類を作って、適当に何か入力。この時必ず改行を入れる事。で、適当に複数の行を選択しておいて、以下のAppleScriptを実行。

tell application "CotEditor"
    tell document 1
        set line ending to CRLF
        set a to contents of selection
        set line ending to LF
        set b to contents of selection
    end tell
    return {a, b}
end tell

line endingは書類の改行コードだ。さて、aとbの違いがわかるだろうか。CRLFの時は、選択範囲より前に存在する改行コードの個数と同じ数だけ、選択範囲の開始位置が前にずれているはずだ(だから選択範囲が1行目までの時は同じ)。これは上記スクリプトと同じ様にしてrange of selectionを取得すると理由が判る。rangeの示す数字自体は変わらないのだ。しかしながら改行コードが変わると、contents of selectonの内容は改行コードの変更を反映したものになる。改行コードの部分で1バイト増えるわけだ。そしてその分range of selectionが指す範囲とcontents of selectonが示す範囲がずれてしまうようだ。ちなみに、contents of document xで取得した場合の改行コードは常にLFになっているようだ。書類全体を処理したいのであればこっちを処理した方が楽だろう。

回避策だが、AppleScriptで処理する場合はcontents of selectonを取得する前にline endingを取得して保持。line endingをLFにして処理をした後、line endingを元に戻すというのが月並だけど確実だと思う。

[ ツッコミの受付は終了しています ]
1: nakamuxu (05-07-11 22:21)
CotEditor のご利用ならびに不具合のご報告、ありがとうございます。
紛う事無きバグです。早めに修正したいと思います。

「CotEditor 0.7.0」のリンク用URL