Quickcursorに見る、アプリケーション間通信

32

description

2009-12-19 Cocoa勉強会 #38

Transcript of Quickcursorに見る、アプリケーション間通信

Page 1: Quickcursorに見る、アプリケーション間通信

QuickCursorに⾒る、アプリケーション間通信

Cocoa勉強会�#38�/�2009.12.19�(土)�/�⽊村渡

Powered by Rabbit 0.6.3 and COZMIXNG

Page 2: Quickcursorに見る、アプリケーション間通信

今⽇の話は

Page 3: Quickcursorに見る、アプリケーション間通信

QuickCursorをダシにCocoa�DO(NSConnection)でないアプリ間通信

のことを

Page 4: Quickcursorに見る、アプリケーション間通信

QuickCursor

Page 5: Quickcursorに見る、アプリケーション間通信

QuickCursor

Page 6: Quickcursorに見る、アプリケーション間通信

QuickCursor

いかなるテキスト入力も指定したテキストエディタで編集できるのが最大の魅力。

Macの⼿書き説明書http://veadardiary.blog29.fc2.com/blog-entry-2522.html

Page 7: Quickcursorに見る、アプリケーション間通信

QuickCursor

別アプリのテキストを指定のエディタで編集できる

.app (NO input manager hacks)✓

Jesse Grosjean (HogBaySoftWare) ✓

オープンソース?✓http://www.hogbaysoftware.com/products/quickcursor/http://github.com/jessegrosjean/quickcursor

Page 8: Quickcursorに見る、アプリケーション間通信

デモ

Page 9: Quickcursorに見る、アプリケーション間通信

QuickCursorのしくみ

Page 10: Quickcursorに見る、アプリケーション間通信

QuickCursorのしくみ

エディタ呼び出し

アプリ�->�QuickCursor1.�

QuickCursor -> エディタ2.�

編集結果を保存

エディタ�->�QuickCursor1.�

QuickCursor -> アプリ2.�

Page 11: Quickcursorに見る、アプリケーション間通信

QuickCursorのしくみ

エディタ呼び出し

Accessibility APIを利用✓

編集結果を保存

ODB Editor Suites (Apple Event)✓http://www.barebones.com/support/develop/odbsuite.html

Page 12: Quickcursorに見る、アプリケーション間通信

コードを⾒よう

Page 13: Quickcursorに見る、アプリケーション間通信

注目するクラス

QCAppDelegate✓

QCUIElement - 操作対象のUI✓

ODBEditor - エディタとの協調✓http://gusmueller.com/odb/

Page 14: Quickcursorに見る、アプリケーション間通信

アプリとのやりとり

Accessibility APIを利用✓

編集対象のテキストを得る

フォーカスされたUIを取得1.�

オブジェクトの値をとる、⽂字列なら処理を続⾏

2.�

Page 15: Quickcursorに見る、アプリケーション間通信

アプリとのやりとり:テキスト取得

-[QCAppDelegate�beginQuickCursorEdit:]

フォーカスされたUIを取得

+[QCUIElement�focusedElement]

1.�

オブジェクトの値をとる、⽂字列なら処理を続⾏

2.�

Page 16: Quickcursorに見る、アプリケーション間通信

アプリとのやりとり

編集結果のテキストを反映

編集結果の⽂字列を保存していたUIに

-[QCAppDelegate����odbEditor:didModifyFileForString:context:]

1.�

Page 17: Quickcursorに見る、アプリケーション間通信

Accessibility�API

◎良いところ

対象のアプリはなにも変更しなくてよい

UIをオブジェクトとして保持できるので、プログラムが単純にできる

×悪いところ

アプリによってはうまくアクセスできない(Mail.appとか)

Page 18: Quickcursorに見る、アプリケーション間通信

エディタとのやりとり

ODB Editor Suitesを利用

Apple Event

Open ( -> Editor)✓

Save, Close (Editor ->)✓

Page 19: Quickcursorに見る、アプリケーション間通信

エディタとのやりとり

Open ( -> Editor)

-[ODBEditor����editString:options:forClient:context:]

Page 20: Quickcursorに見る、アプリケーション間通信

エディタとのやりとり

Save (Editor ->)

-[QCAppDelegate����odbEditor:didModifyFileForString:context:]

編集結果を呼び出し元のアプリに反映

Page 21: Quickcursorに見る、アプリケーション間通信

エディタとのやりとり

Close (Editor ->)

-[QCAppDelegate���odbEditor:didCloseFileForString:context:]

(設定されていれば)

呼び出し元のアプリをアクティブに

Page 22: Quickcursorに見る、アプリケーション間通信

ODB�Editor�Suites

BBEditはじめ⻑い実績がある✓

ODBEditorを使えばエディタ呼び出し側の実装は簡単(エディタ側はちょっとめんどい)

Page 23: Quickcursorに見る、アプリケーション間通信

まとめ

QuickCursorをネタに

DOじゃないアプリ間通信についてそれぞれに優位なとこがある

Accessibility API✓

Apple Event✓

知っとくとよいかも

Page 24: Quickcursorに見る、アプリケーション間通信

おまけ

Page 25: Quickcursorに見る、アプリケーション間通信

昔、似たよなものがあったような・・・

Page 26: Quickcursorに見る、アプリケーション間通信

EditCast

Page 27: Quickcursorに見る、アプリケーション間通信

EditCast

Page 28: Quickcursorに見る、アプリケーション間通信

QuickCusorとEditCast

アプリ�<=>�SIMBL✓

Accessibility API, Apple Event <=> poseAsClass:NSTextView

QuickCusorのアプローチのほうがカバー範囲が広い

EditCastはLeopard以降で動かないぜ

Page 29: Quickcursorに見る、アプリケーション間通信

EditCast2をつくるよ!

Page 30: Quickcursorに見る、アプリケーション間通信

QuickCursor+

vim�onTerminal.app

Page 31: Quickcursorに見る、アプリケーション間通信

Page 32: Quickcursorに見る、アプリケーション間通信

質問などあればどうぞ

Powered by Rabbit 0.6.3 and COZMIXNG