<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: RubyCocoaを使ってQuicksilverプラグインを書く</title>
	<atom:link href="http://blog.deadbeaf.org/2008/02/03/quicksilver-plugin-with-rubycocoa/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.deadbeaf.org/2008/02/03/quicksilver-plugin-with-rubycocoa/</link>
	<description>one step closer</description>
	<lastBuildDate>Fri, 19 Feb 2010 20:16:46 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: hisa</title>
		<link>http://blog.deadbeaf.org/2008/02/03/quicksilver-plugin-with-rubycocoa/comment-page-1/#comment-1238</link>
		<dc:creator>hisa</dc:creator>
		<pubDate>Mon, 04 Feb 2008 02:54:48 +0000</pubDate>
		<guid isPermaLink="false">http://blog.deadbeaf.org/?p=770#comment-1238</guid>
		<description>&lt;p&gt;コメント内のソースがぐちゃぐちゃになってたのを直してくれたんですね。どうもありがとう&lt;/p&gt;

&lt;p&gt;僕のやつは、ヤフー翻訳を呼び出すアクションを作るのにhpricotが使いたかったのでRubyCocoaをリンクしたみたいな感じになってますが、Rubyでアクション(やその他)を書ける汎用のプラグインがあるとうれしいですよね。&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>コメント内のソースがぐちゃぐちゃになってたのを直してくれたんですね。どうもありがとう</p>

<p>僕のやつは、ヤフー翻訳を呼び出すアクションを作るのにhpricotが使いたかったのでRubyCocoaをリンクしたみたいな感じになってますが、Rubyでアクション(やその他)を書ける汎用のプラグインがあるとうれしいですよね。</p>]]></content:encoded>
	</item>
	<item>
		<title>By: mootoh</title>
		<link>http://blog.deadbeaf.org/2008/02/03/quicksilver-plugin-with-rubycocoa/comment-page-1/#comment-1236</link>
		<dc:creator>mootoh</dc:creator>
		<pubDate>Sun, 03 Feb 2008 13:30:18 +0000</pubDate>
		<guid isPermaLink="false">http://blog.deadbeaf.org/?p=770#comment-1236</guid>
		<description>&lt;p&gt;hisaさん:&lt;/p&gt;

&lt;p&gt;おおおお、ありがとうございます!
つくってらしたんですね。
QSActionProviderの派生クラスをRubyで実装するのは、まさにやりたかったところでした。&lt;/p&gt;

&lt;p&gt;頂いたプロジェクトソースを元にして、自分なりのまとめを書いてみます。&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>hisaさん:</p>

<p>おおおお、ありがとうございます!
つくってらしたんですね。
QSActionProviderの派生クラスをRubyで実装するのは、まさにやりたかったところでした。</p>

<p>頂いたプロジェクトソースを元にして、自分なりのまとめを書いてみます。</p>]]></content:encoded>
	</item>
	<item>
		<title>By: hisa</title>
		<link>http://blog.deadbeaf.org/2008/02/03/quicksilver-plugin-with-rubycocoa/comment-page-1/#comment-1237</link>
		<dc:creator>hisa</dc:creator>
		<pubDate>Sun, 03 Feb 2008 11:28:56 +0000</pubDate>
		<guid isPermaLink="false">http://blog.deadbeaf.org/?p=770#comment-1237</guid>
		<description>&lt;p&gt;おおすばらしい!&lt;/p&gt;

&lt;p&gt;実を言うと僕も作って使ってたのですが、解決できていない問題もあったりして、無精して公開してませんでした。メールでソース(プロジェクト)を送るつもりですので、よろしければ煮て焼いて食うなりなんなりしてください。&lt;/p&gt;

&lt;p&gt;初期化のタイミングですが、僕はプラグインのクラスがロードされたタイミングでやってます:&lt;/p&gt;

&lt;pre lang=&quot;objc&quot;&gt;@implementation QSRubyEnablerPlugin
  + (void)load {
    static int installed = 0;
    if (! installed)
      if (! RBBundleInit(&quot;init_ruby_enabler.rb&quot;, [self class], self))
        installed = 1;
  }
  @end&lt;/pre&gt;

&lt;p&gt;それからアクションは QSActionProvider の派生クラスとして実装しました。&lt;/p&gt;

&lt;pre lang=&quot;ruby&quot;&gt;module QSRubyEnablerPluginActionModule
    def obj2qsobj(obj)
      obj = OSX::QSObject.objectWithString(obj.to_s) unless obj.is_a? OSX::QSObject
      obj
    end

def show_large_type(obj)
  OSX::QSTextActions.provider.showLargeType(obj2qsobj(obj))
end

def paste_string(str)
  pb = OSX::NSPasteboard.generalPasteboard
  pb.declareTypes_owner([OSX::NSStringPboardType], self)
  pb.setString_forType(str, OSX::NSStringPboardType)
end

end

class TranslatorAction &lt; OSX::QSActionProvider
    include OSX
    include QSRubyEnablerPluginActionModule
    require &#039;yahoo-honyaku&#039;

def initialize
  @yahoo_honyaku = YahooHonyaku.new
end

def translateEJ(obj) translate_qsobject(:ej, obj) end
def translateJE(obj) translate_qsobject(:je, obj) end
def translateCJ(obj) translate_qsobject(:cj, obj) end
def translateJC(obj) translate_qsobject(:jc, obj) end
def translateKJ(obj) translate_qsobject(:kj, obj) end
def translateJK(obj) translate_qsobject(:jk, obj) end

private
def translate_qsobject(mode, obj)
  src = obj.stringValue
  src.gsub!
  result = @yahoo_honyaku.translate(mode, src.to_s)
  show_large_type(result)
  paste_string(result.to_s)
  nil
rescue Exception =&gt; err
  show_large_type(err.message)
  NSLog(&quot;QSRubyEnablerPluginAction error: %@&quot;, err.message)
  nil
end

end
&lt;/pre&gt;
</description>
		<content:encoded><![CDATA[<p>おおすばらしい!</p>

<p>実を言うと僕も作って使ってたのですが、解決できていない問題もあったりして、無精して公開してませんでした。メールでソース(プロジェクト)を送るつもりですので、よろしければ煮て焼いて食うなりなんなりしてください。</p>

<p>初期化のタイミングですが、僕はプラグインのクラスがロードされたタイミングでやってます:</p>


<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #a61390;">@implementation</span> QSRubyEnablerPlugin
  <span style="color: #002200;">+</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span>load <span style="color: #002200;">&#123;</span>
    <span style="color: #a61390;">static</span> <span style="color: #a61390;">int</span> installed <span style="color: #002200;">=</span> <span style="color: #2400d9;">0</span>;
    <span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span><span style="color: #002200;">!</span> installed<span style="color: #002200;">&#41;</span>
      <span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span><span style="color: #002200;">!</span> RBBundleInit<span style="color: #002200;">&#40;</span><span style="color: #bf1d1a;">&quot;init_ruby_enabler.rb&quot;</span>, <span style="color: #002200;">&#91;</span>self class<span style="color: #002200;">&#93;</span>, self<span style="color: #002200;">&#41;</span><span style="color: #002200;">&#41;</span>
        installed <span style="color: #002200;">=</span> <span style="color: #2400d9;">1</span>;
  <span style="color: #002200;">&#125;</span>
  <span style="color: #a61390;">@end</span></pre></div></div>




<p>それからアクションは QSActionProvider の派生クラスとして実装しました。</p>


<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#9966CC; font-weight:bold;">module</span> QSRubyEnablerPluginActionModule
    <span style="color:#9966CC; font-weight:bold;">def</span> obj2qsobj<span style="color:#006600; font-weight:bold;">&#40;</span>obj<span style="color:#006600; font-weight:bold;">&#41;</span>
      obj = <span style="color:#6666ff; font-weight:bold;">OSX::QSObject</span>.<span style="color:#9900CC;">objectWithString</span><span style="color:#006600; font-weight:bold;">&#40;</span>obj.<span style="color:#9900CC;">to_s</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">unless</span> obj.<span style="color:#9900CC;">is_a</span>? <span style="color:#6666ff; font-weight:bold;">OSX::QSObject</span>
      obj
    <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
<span style="color:#9966CC; font-weight:bold;">def</span> show_large_type<span style="color:#006600; font-weight:bold;">&#40;</span>obj<span style="color:#006600; font-weight:bold;">&#41;</span>
  <span style="color:#6666ff; font-weight:bold;">OSX::QSTextActions</span>.<span style="color:#9900CC;">provider</span>.<span style="color:#9900CC;">showLargeType</span><span style="color:#006600; font-weight:bold;">&#40;</span>obj2qsobj<span style="color:#006600; font-weight:bold;">&#40;</span>obj<span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
<span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
<span style="color:#9966CC; font-weight:bold;">def</span> paste_string<span style="color:#006600; font-weight:bold;">&#40;</span>str<span style="color:#006600; font-weight:bold;">&#41;</span>
  pb = <span style="color:#6666ff; font-weight:bold;">OSX::NSPasteboard</span>.<span style="color:#9900CC;">generalPasteboard</span>
  pb.<span style="color:#9900CC;">declareTypes_owner</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#6666ff; font-weight:bold;">OSX::NSStringPboardType</span><span style="color:#006600; font-weight:bold;">&#93;</span>, <span style="color:#0000FF; font-weight:bold;">self</span><span style="color:#006600; font-weight:bold;">&#41;</span>
  pb.<span style="color:#9900CC;">setString_forType</span><span style="color:#006600; font-weight:bold;">&#40;</span>str, <span style="color:#6666ff; font-weight:bold;">OSX::NSStringPboardType</span><span style="color:#006600; font-weight:bold;">&#41;</span>
<span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
<span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
<span style="color:#9966CC; font-weight:bold;">class</span> TranslatorAction <span style="color:#006600; font-weight:bold;">&amp;</span>lt; <span style="color:#6666ff; font-weight:bold;">OSX::QSActionProvider</span>
    <span style="color:#9966CC; font-weight:bold;">include</span> OSX
    <span style="color:#9966CC; font-weight:bold;">include</span> QSRubyEnablerPluginActionModule
    <span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'yahoo-honyaku'</span>
&nbsp;
<span style="color:#9966CC; font-weight:bold;">def</span> initialize
  <span style="color:#0066ff; font-weight:bold;">@yahoo_honyaku</span> = YahooHonyaku.<span style="color:#9900CC;">new</span>
<span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
<span style="color:#9966CC; font-weight:bold;">def</span> translateEJ<span style="color:#006600; font-weight:bold;">&#40;</span>obj<span style="color:#006600; font-weight:bold;">&#41;</span> translate_qsobject<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:ej</span>, obj<span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">def</span> translateJE<span style="color:#006600; font-weight:bold;">&#40;</span>obj<span style="color:#006600; font-weight:bold;">&#41;</span> translate_qsobject<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:je</span>, obj<span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">def</span> translateCJ<span style="color:#006600; font-weight:bold;">&#40;</span>obj<span style="color:#006600; font-weight:bold;">&#41;</span> translate_qsobject<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:cj</span>, obj<span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">def</span> translateJC<span style="color:#006600; font-weight:bold;">&#40;</span>obj<span style="color:#006600; font-weight:bold;">&#41;</span> translate_qsobject<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:jc</span>, obj<span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">def</span> translateKJ<span style="color:#006600; font-weight:bold;">&#40;</span>obj<span style="color:#006600; font-weight:bold;">&#41;</span> translate_qsobject<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:kj</span>, obj<span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">def</span> translateJK<span style="color:#006600; font-weight:bold;">&#40;</span>obj<span style="color:#006600; font-weight:bold;">&#41;</span> translate_qsobject<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:jk</span>, obj<span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
private
<span style="color:#9966CC; font-weight:bold;">def</span> translate_qsobject<span style="color:#006600; font-weight:bold;">&#40;</span>mode, obj<span style="color:#006600; font-weight:bold;">&#41;</span>
  src = obj.<span style="color:#9900CC;">stringValue</span>
  src.<span style="color:#CC0066; font-weight:bold;">gsub!</span>
  result = <span style="color:#0066ff; font-weight:bold;">@yahoo_honyaku</span>.<span style="color:#9900CC;">translate</span><span style="color:#006600; font-weight:bold;">&#40;</span>mode, src.<span style="color:#9900CC;">to_s</span><span style="color:#006600; font-weight:bold;">&#41;</span>
  show_large_type<span style="color:#006600; font-weight:bold;">&#40;</span>result<span style="color:#006600; font-weight:bold;">&#41;</span>
  paste_string<span style="color:#006600; font-weight:bold;">&#40;</span>result.<span style="color:#9900CC;">to_s</span><span style="color:#006600; font-weight:bold;">&#41;</span>
  <span style="color:#0000FF; font-weight:bold;">nil</span>
<span style="color:#9966CC; font-weight:bold;">rescue</span> <span style="color:#CC00FF; font-weight:bold;">Exception</span> =<span style="color:#006600; font-weight:bold;">&amp;</span>gt; err
  show_large_type<span style="color:#006600; font-weight:bold;">&#40;</span>err.<span style="color:#9900CC;">message</span><span style="color:#006600; font-weight:bold;">&#41;</span>
  NSLog<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;QSRubyEnablerPluginAction error: %@&quot;</span>, err.<span style="color:#9900CC;">message</span><span style="color:#006600; font-weight:bold;">&#41;</span>
  <span style="color:#0000FF; font-weight:bold;">nil</span>
<span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>
]]></content:encoded>
	</item>
</channel>
</rss>
