Quickcursorに見る、アプリケーション間通信
-
Upload
wataru-kimura -
Category
Technology
-
view
4.291 -
download
4
description
Transcript of Quickcursorに見る、アプリケーション間通信
QuickCursorに⾒る、アプリケーション間通信
Cocoa勉強会�#38�/�2009.12.19�(土)�/�⽊村渡
Powered by Rabbit 0.6.3 and COZMIXNG
今⽇の話は
QuickCursorをダシにCocoa�DO(NSConnection)でないアプリ間通信
のことを
QuickCursor
QuickCursor
QuickCursor
いかなるテキスト入力も指定したテキストエディタで編集できるのが最大の魅力。
Macの⼿書き説明書http://veadardiary.blog29.fc2.com/blog-entry-2522.html
QuickCursor
別アプリのテキストを指定のエディタで編集できる
✓
.app (NO input manager hacks)✓
Jesse Grosjean (HogBaySoftWare) ✓
オープンソース?✓http://www.hogbaysoftware.com/products/quickcursor/http://github.com/jessegrosjean/quickcursor
デモ
QuickCursorのしくみ
QuickCursorのしくみ
エディタ呼び出し
アプリ�->�QuickCursor1.�
QuickCursor -> エディタ2.�
編集結果を保存
エディタ�->�QuickCursor1.�
QuickCursor -> アプリ2.�
QuickCursorのしくみ
エディタ呼び出し
Accessibility APIを利用✓
編集結果を保存
ODB Editor Suites (Apple Event)✓http://www.barebones.com/support/develop/odbsuite.html
コードを⾒よう
注目するクラス
QCAppDelegate✓
QCUIElement - 操作対象のUI✓
ODBEditor - エディタとの協調✓http://gusmueller.com/odb/
アプリとのやりとり
Accessibility APIを利用✓
編集対象のテキストを得る
フォーカスされたUIを取得1.�
オブジェクトの値をとる、⽂字列なら処理を続⾏
2.�
アプリとのやりとり:テキスト取得
-[QCAppDelegate�beginQuickCursorEdit:]
フォーカスされたUIを取得
+[QCUIElement�focusedElement]
1.�
オブジェクトの値をとる、⽂字列なら処理を続⾏
2.�
アプリとのやりとり
編集結果のテキストを反映
編集結果の⽂字列を保存していたUIに
-[QCAppDelegate����odbEditor:didModifyFileForString:context:]
1.�
Accessibility�API
◎良いところ
対象のアプリはなにも変更しなくてよい
✓
UIをオブジェクトとして保持できるので、プログラムが単純にできる
✓
×悪いところ
アプリによってはうまくアクセスできない(Mail.appとか)
✓
エディタとのやりとり
ODB Editor Suitesを利用
Apple Event
Open ( -> Editor)✓
Save, Close (Editor ->)✓
エディタとのやりとり
Open ( -> Editor)
-[ODBEditor����editString:options:forClient:context:]
✓
エディタとのやりとり
Save (Editor ->)
-[QCAppDelegate����odbEditor:didModifyFileForString:context:]
✓
編集結果を呼び出し元のアプリに反映
エディタとのやりとり
Close (Editor ->)
-[QCAppDelegate���odbEditor:didCloseFileForString:context:]
✓
(設定されていれば)
呼び出し元のアプリをアクティブに
ODB�Editor�Suites
BBEditはじめ⻑い実績がある✓
ODBEditorを使えばエディタ呼び出し側の実装は簡単(エディタ側はちょっとめんどい)
✓
まとめ
QuickCursorをネタに
DOじゃないアプリ間通信についてそれぞれに優位なとこがある
Accessibility API✓
Apple Event✓
知っとくとよいかも
おまけ
昔、似たよなものがあったような・・・
EditCast
EditCast
QuickCusorとEditCast
アプリ�<=>�SIMBL✓
Accessibility API, Apple Event <=> poseAsClass:NSTextView
✓
QuickCusorのアプローチのほうがカバー範囲が広い
EditCastはLeopard以降で動かないぜ
EditCast2をつくるよ!
QuickCursor+
vim�onTerminal.app
♥
終
質問などあればどうぞ
Powered by Rabbit 0.6.3 and COZMIXNG