SlideShare a Scribd company logo
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のしくみ
エディタ呼び出し
1.�アプリ�->�QuickCursor
 2.�QuickCursor -> エディタ
編集結果を保存
1.�エディタ�->�QuickCursor
 2.�QuickCursor -> アプリ
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を利用
編集対象のテキストを得る
1.�フォーカスされたUIを取得
2.�オブジェクトの値をとる、⽂字列
   なら処理を続⾏
アプリとのやりとり:テキスト取得

 -[QCAppDelegate�beginQuickCursorEdit:]

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

    +[QCUIElement�focusedElement]

2.�オブジェクトの値をとる、⽂字列
   なら処理を続⾏
アプリとのやりとり
編集結果のテキストを反映
1.�編集結果の⽂字列を保存していた
   UIに

 -[QCAppDelegate
 ����odbEditor:didModifyFileForString:context:]
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�on
Terminal.app
     ♥
終
質問などあれば
               どうぞ

Powered by Rabbit 0.6.3 and COZMIXNG

More Related Content

PDF
Azure boards for beginners
PDF
How to create your own Azure Pipeline's image
PDF
Wantedlyを2年間Herokuで運用した話
PDF
One-time Binding & $digest
PPTX
Azure DevOps ハンズオン Vo.3 ~Delivery Plans を用いたプロジェクトのスケジュール管理~
PDF
Introduce TFSUG and Azure DevOps Server 2020
PDF
Ignite 2021 振り返り(DevOps)
PPTX
What's new Azure DevOps in //Build 2019
Azure boards for beginners
How to create your own Azure Pipeline's image
Wantedlyを2年間Herokuで運用した話
One-time Binding & $digest
Azure DevOps ハンズオン Vo.3 ~Delivery Plans を用いたプロジェクトのスケジュール管理~
Introduce TFSUG and Azure DevOps Server 2020
Ignite 2021 振り返り(DevOps)
What's new Azure DevOps in //Build 2019

What's hot (20)

PDF
Azure Boards and Azure Test Plans inside out.
PDF
Visual Studio 2019 新機能を時間のかぎりできるだけ!
PDF
実践リーダブルコードのアイスブレイク
PDF
Getting Start for Azure Pipelines
PDF
Azure DevOps's security
PDF
Deploy Strategy with Azure Pipelines
PPTX
【Roppongi.aar #1】Activity/FragmentからControllerへ処理を委譲する
PDF
Azure DevOps入門~TechLab編
PPTX
Power Automate for desktopとGoogle Apps Scriptの連携について
PDF
Gradleプラグインを作成してみた
PDF
「何もしないのにCIが失敗した」を防ぐ
PPTX
Azure DevOps ハンズオン Vo.2 ~Azure DevOps Wiki を用いたドキュメントの作成~
PDF
UIViewController in XIB + IBDesignable
PPTX
Deploy to Azure by ??? Azure Repos or GitHub
PDF
AndroidStudioはじめました ~Gradle編~
PDF
Vue.js with Go
PDF
はじめよう Azure Functions
PDF
Visual studio extensibility
PDF
Visual Studio を使用した Cordova 開発
PDF
DevOps and Compliance and Security
Azure Boards and Azure Test Plans inside out.
Visual Studio 2019 新機能を時間のかぎりできるだけ!
実践リーダブルコードのアイスブレイク
Getting Start for Azure Pipelines
Azure DevOps's security
Deploy Strategy with Azure Pipelines
【Roppongi.aar #1】Activity/FragmentからControllerへ処理を委譲する
Azure DevOps入門~TechLab編
Power Automate for desktopとGoogle Apps Scriptの連携について
Gradleプラグインを作成してみた
「何もしないのにCIが失敗した」を防ぐ
Azure DevOps ハンズオン Vo.2 ~Azure DevOps Wiki を用いたドキュメントの作成~
UIViewController in XIB + IBDesignable
Deploy to Azure by ??? Azure Repos or GitHub
AndroidStudioはじめました ~Gradle編~
Vue.js with Go
はじめよう Azure Functions
Visual studio extensibility
Visual Studio を使用した Cordova 開発
DevOps and Compliance and Security
Ad

Viewers also liked (14)

PDF
Three20のTTURLRequest
PDF
Precipitateに見る、外部リソースのSpotlight化
PDF
InputMethodKit超入門
PDF
らくらくアップデートSparkle
PDF
リマインダーの繰り返しを自由に設定する (EventKit)
PDF
Hotkeyslib3 Cocoaでホットキー
PDF
InputMethodKitで入力プログラムをつくろう
PDF
PSMTabBarControl
PDF
SIMBLでCocoaアプリをパワーアップ
PDF
ClangでObjective-Cを静的解析
PDF
Xcode4 project template (slide)
PDF
値変換
PDF
Clang Modules
PDF
OS X DYLD_* environments
Three20のTTURLRequest
Precipitateに見る、外部リソースのSpotlight化
InputMethodKit超入門
らくらくアップデートSparkle
リマインダーの繰り返しを自由に設定する (EventKit)
Hotkeyslib3 Cocoaでホットキー
InputMethodKitで入力プログラムをつくろう
PSMTabBarControl
SIMBLでCocoaアプリをパワーアップ
ClangでObjective-Cを静的解析
Xcode4 project template (slide)
値変換
Clang Modules
OS X DYLD_* environments
Ad

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