CotEditorからapplescript経由でperlへ

2015/9/7 [18:53:38] (月) 天気

applescriptというのを初めて触ってみた。

平文でわかりやすいシェルスクリプトて感じ、かな。


WINDWOSのxyzzyでやってるのと同じこと、ほぼ近いことをmacのCotEditorでもやりたい、ということでスクリプトメニューにperlのスクリプトを登録。これは気軽手軽に思ったことができるのでありがたい。外部のスクリプト、perlじゃなくてもrubyやphp、シェルスクリプトが使えるなら万能だ。


ということでやってたんだけど。


外部スクリプトはひとつにして、スクリプト内で処理を振り分けたい。処理単位でスクリプトを作ってスクリプトメニューに登録するとキリがない。それには対話的にユーザー入力をスクリプトで受け取りたい。ユーザーが入力したテキストでも処理を振り分けたい。

→ユーザーの入力を受け取る仕組みが必要。


CotEditorが外部スクリプトの処理した内容を受けとるのは編集中のテキスト上か、あるいは使わないかの2択だけど、外部スクリプトは必ずしもフィルタ的な用途だけじゃない。処理した結果(出力内容じゃなくて、戻り値みたいなもの)を受け取って確認するだけ、とか、選択範囲を処理してその部分をWEBの管理ページにペーストするだけ、とか、できれば元テキストはそのままの状態にしておいて欲しいということもある。

→作業用の新規ドキュメントがあれば助かる。


どちらも、perlやシェルスクリプトなどの外部スクリプトではちょっと難しそう。ていうか、スクリプト側からではアクセスできないこと、かな。


なので、ちょっと調べてみた。

applescriptを使えば、ユーザー入力を取得するdialogを出せる、CotEditorに新規ドキュメントを開くように言うこともできる。


1)テキストに選択範囲があったらば。

dialogを出して、選択範囲のテキストに対してどんな処理をするのか指示を受けとる。

スクリプトに入力されたテキストを引数として渡す。選択範囲のテキストはechoで出力してパイプでスクリプトに流しこむ。

2)選択範囲がなかったら。

ファイル名、パスを見てどんな処理をするのか判断する。

スクリプトにはフルパスのファイル名を引数として渡す。

どちらの場合も出力先は新規ドキュメント「名称未設定」とする。


ごそごそ調べて書いたapplescirpt


set home to (path to home folder)’s POSIX path
set myScript to home & "Documents/_script/_coteditor-tmp.pl"
set Filename to (missing value)
set buffer to ""
set input to ""
set cmd to ""
tell application "CotEditor"
    if not (exists front document) then return
    set Filename to file of front document
    try
        set Filename to ((Filename)’s POSIX path)
    on error
        set Filename to (missing value)
    end try
    set buffer to (contents of selection of front document)
    if (buffer is not "") then
        set input to text returned of (display dialog "Op [D][T][E]" default answer "")
    end if
    if (buffer is not "") and (input is not "") then
        set cmd to ("echo " & quoted form of buffer & " | " & myScript & " " & input)
    else if (Filename is not (missing value)) then
        set cmd to ("perl " & myScript & " ’" & Filename & "’")
    else
        return
    end if
    make new document
    set (contents of front document) to (do shell script cmd)
    activate
end tell

↑これを「util-perl.@p.applescript」という名前にして、「~/Library/Application Support/CotEditor/ScriptMenu」フォルダに入れておけばCotEditorで作業していていつでも呼び出せる。


自分環境・自分作業内容に特化したスクリプトで、誰にとっても有用・便利に使えるものではないけど、applescriptにはまったく馴染みがないので、備忘録としてメモしておこう。


明日にはもう忘れているであろう自分のためにもメモが必要なのだ。


[09/07 20:56:44]ちなみに。

applescriptの「do shell script」はスクリプトの標準出力を取得している。

たとえば、perlのスクリプトチェックの「perl -wc」は標準エラー出力。applescriptに出力させるには標準エラー出力(STDERR)を標準出力(STDOUT)に向けてやる必要がある。


perlのスクリプトの中で

open STDERR, ">&", *STDOUT

この1行を該当するサブルーチンに入れておく必要がある。



image
<<2026/1>>
    123
45678910
11121314151617
18192021222324
25262728293031
検索:

【最近の20件】