Home > Tags > Applescript

Applescript

2ch

ある時アクセスログを眺めていると…。
2chから?
あー吃驚した。(ってたいしたこと書いてないのに)

 iTunes StoreiJapanj

CotEditor + AppleScript

ここしばらくハマっているのは、間違いなく CotEditor + AppleScript だな。

いろいろ構想はあるものの、思うように動作しなかったり、なかなか時間がとれなかったり…。
期待していただいている方もあるようなので、頑張ってみたいと思う。

フォルダ指定括置換については、サブフォルダをGETするループ処理ができたら問題なくいけるんじゃないかと思ったり。

YooEDIT風の複数ファイルの一括検索も、検索自体はできてるんで、これも上記と同じくサブフォルダGETのループ処理が残っているだけ。

あと、DTP関係の方にはつきものの、総ルビ。
これも出来ちゃったりする。ただし、親文字1字に対してのルビではないんであるが…。
また、文章に依存する部分が大きいのでややこしい読み方は正確さに欠ける部分も。
とはいえ実務に使っちゃってたりする。

タネあかしは近日。

取って喰ったりしないんで、お気軽にコメントなんか残していただければウレシイかも。

書いてるウチに日が変わっちまった…。3日にしておこう。

TigerのAppleScript

先日から、CotEditorで「フォルダ指定一括置換」というスクリプトを作ってみているんであるが、TigerのAppleScriptでは、2バイト文字が含まれていると、正常動作しない様子。

なんで気づいたかというのは、サブフォルダは処理してないんで、これも含めて検索置換できるようにやってみようと思い、その部分を追加しようとしたところ気づいたというワケ。

例えば、

Macintosh HD:Users:G5:TESTフォルダ:AJAXTEST:

というフォルダ名称をGETしようとして、

set the_path to (choose folder)
set the_list to (every folder of (the_path))

などとやってしまうと、

Macintosh HD:Users:G5:TESTフォルダ:AJAXT

という値が返ってくる。どうやら、2バイト文字も1文字、1バイト文字も1文字というカウントで値が返ってきてしまうようだ。「フォルダ」の4文字が引かれて途中でちぎれてしまう。

ちなみに、同様のスクリプトをLeopardで実行してみると、問題なく動作したんである。

効率は良くないんであるが、リスト項目1つに対してテキスト項目を数え、
repeat 文で各テキストを取り出してから、連結する方法が一番問題がないのかも。

そーいや、そういったソースを見た覚えがある…。
nakamuxuさんにお手間取らせて申し訳なかったなぁ…(反省)。

CotEditor で複数ファイル置換

しつこいようだが、AYNiMacさん作の「CotEditor」は手放せない。
時折アップデートがリリースされていないかとチェックしているんであるが、0.9.4リリースのコメントをふとみると…。

要望なのですが、mi(http://mimikaki.net)みたいに、指定したフォルダ内のファイルを一括検索/置換が出来ると嬉しいです。
複数のファイルにわたる変更があった場合、一々全てのファイルを開かなくて済むので便利かなぁと思います。
検討して頂けると幸いです。

とのコメントが。

せっかくAppleScriptが使えるんだから「んじゃやってみよう!」と思って書いてみた。

念のため、実行専用アプリになっている。DownLoad > Tiger-FAR-App.zip
(ソースがたぶん美しくないんで実行専用なだけです。5/30追記 6/1 UPDATE)

5/31追記

nakamuxu様から、環境により動作しないとご指摘。恥ずかしながらスクリプトファイルをアップ(笑わないでね)。
現状の問題点として、CotEditorのスクリプトフォルダに入れて実行すると、正常動作をしない。
ファイルは開くが、検索置換が行われない。何でだろう。
アプリケーションとして保存し、実行すれば問題なく動作した。(10.4.11-PPC と 10.5.2Intel で動作確認)
[Tiger Only] AppleScript Source FIle DownLoad > Tiger-FAR-scpt.zip

6/1追記

[Leopard Only] AppleScript Source FIle DownLoad > Leopard-FAR-scpt.zip

CotEditor 作者のnakamuxu様からのご指摘で、以下の点を修正した。
Loepard(10.5.2)ではスクリプトフォルダに入れても正常動作するが、Tiger(10.4.11)では、現在のところ正常動作しない。[Tiger Only]と記されたものをアプリケーション形式で使用する方法しかないようだ。

6/2追記

Tigerの場合、フォルダに2バイト文字と1バイト文字が混在している場合(2バイト文字が含まれている場合か?)、正常に動作しない可能性があります。Leopardでは大丈夫かも。

スクリプトメニューから利用するには、

  1. アプリケーション形式で保存したファイルを見えるようにしておく。
  2. 「スクリプトエディタ」を開いて「記録」をクリック。
  3. 「アプリケーション形式で保存したファイル」を開く(ダブルクリック)。
  4. 再度「スクリプトエディタ」に戻り「中止」をクリック。スクリプトを保存。

これでスクリプトメニューから使用できるようになる。

CotEditorのスクリプトフォルダ内に置くときにはスクリプトファイルのままでいけるはずですが、少し変更しないとエラーになってしまいますね。CotEditor側の問題かもしれませんが、下記の通りにすると、うまくいきます。

  1. 最初の「if (editor_path = “”) then」からのif文部分をコメントアウト(あってもいいですが、スクリプトメニューから実行されるときはCotEditorは起動しているので)
  2. repeat 文内の 「open (item i of the_contents)〜」行をコメントアウト
  3. 「tell application “CotEditor”」のすぐ後に下記の2行を追加
    「activate」「open (item i of the_contents) as text」

機能としては至ってシンプルで

  • アプリを開いてフォルダを指定。
  • 検索文字(正規表現)を指定。
  • 置換文字を指定。
  • すべてのテキストファイル(ファイルタイプが”TEXT”のファイル)を開いて検索置換する。その際、改行コードは保持されるが、いったんLFに置換し、もとに戻しているため、置換がなくても編集されたのと同じ状態でファイルは開かれている。
  • 開いたファイルは、編集中の状態のまま開かれた状態。正常に処理されているか、確認後保存。
  • 【決まり文句の免責事項】このアプリを利用した事によるいかなる損害も作者(M-M-J)は一切の責任を負わない。
  • もし「ソースが欲しい」という奇特な方は、コメント等でご連絡を。(上記に公開)

OS9では、Yooichi Tagawaさん作の「YooEdit」を愛用していて、「複数ファイルの検索」というチェック項目があったんで、非常に重宝していた。
CGIやPHPのコードを追っかけて、一括で検索/置換したい場合、この機能は実に重宝する。

YooEDIT 検索置換ダイアログ

YooEDIT 検索置換ダイアログ

YooEDIT 検索結果

YooEDIT 検索結果

「検索結果」というウインドウに表示された行をダブルクリックすると、そのファイルが開き、その行にカーソルが移動するもの。

がんばったらAppleScriptでも、なんだかいけそうな気がするー。(あると思います)
(でもダブルクリックで開くのは無理かも。5/30追記)

(ダブルクリックで開くのは無理だけど、かなりいい線で実現できました。近日アップします。6/1追記)

正規表現

Perlにハマった時期がある。
でもCGIじゃなく「テキスト置換」。仕事でどうしても漢字統一表記、送り仮名統一…。いろんな面倒から解放されたくてはじめたことなんであるが、どうやら性にあってるらしい。
手始めはSedMac。これである程度正規表現を覚えたものの、Perlとは多少表記法法がちがったような…。
本格的にPerlにハマった頃は、ダイアログを表示したり、サブルーチンを使ってみたり、とにかく使えるものはなんでも使ってた感がある。
今はPerlを使用することも、とんとなくなった。
OSX 上で代替としてCotEditorを使用している。OgreKitというフレームワークが組み込まれた、最強(と思っている)エディタだ。正規表現による置換検索ができないと仕事にならない。しかもマクロも使えるからたまりません。マクロといってもAppleScript。これまたハマった時期がありまして…。

coteditor

coteditor

用語の使い方さえ理解すればこっちのもの。

いまではなくてはならない存在です。

Home > Tags > Applescript

Search
Feeds
Meta

Return to page top

(-_-)